graphql 1.9.17 → 1.11.7
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 +4 -4
- data/lib/generators/graphql/core.rb +18 -2
- data/lib/generators/graphql/install_generator.rb +27 -0
- data/lib/generators/graphql/object_generator.rb +52 -8
- data/lib/generators/graphql/templates/base_argument.erb +2 -0
- data/lib/generators/graphql/templates/base_enum.erb +2 -0
- data/lib/generators/graphql/templates/base_field.erb +2 -0
- data/lib/generators/graphql/templates/base_input_object.erb +2 -0
- data/lib/generators/graphql/templates/base_interface.erb +2 -0
- data/lib/generators/graphql/templates/base_mutation.erb +2 -0
- data/lib/generators/graphql/templates/base_object.erb +2 -0
- data/lib/generators/graphql/templates/base_scalar.erb +2 -0
- data/lib/generators/graphql/templates/base_union.erb +2 -0
- data/lib/generators/graphql/templates/enum.erb +2 -0
- data/lib/generators/graphql/templates/graphql_controller.erb +14 -10
- data/lib/generators/graphql/templates/interface.erb +2 -0
- data/lib/generators/graphql/templates/loader.erb +2 -0
- data/lib/generators/graphql/templates/mutation.erb +2 -0
- data/lib/generators/graphql/templates/mutation_type.erb +2 -0
- data/lib/generators/graphql/templates/object.erb +2 -0
- data/lib/generators/graphql/templates/query_type.erb +2 -0
- data/lib/generators/graphql/templates/scalar.erb +2 -0
- data/lib/generators/graphql/templates/schema.erb +10 -0
- data/lib/generators/graphql/templates/union.erb +3 -1
- data/lib/graphql/analysis/ast/field_usage.rb +1 -1
- data/lib/graphql/analysis/ast/query_complexity.rb +178 -67
- data/lib/graphql/analysis/ast/visitor.rb +3 -3
- data/lib/graphql/analysis/ast.rb +12 -11
- data/lib/graphql/argument.rb +10 -38
- data/lib/graphql/backtrace/table.rb +10 -2
- data/lib/graphql/backtrace/tracer.rb +2 -1
- data/lib/graphql/base_type.rb +4 -0
- data/lib/graphql/compatibility/execution_specification/specification_schema.rb +2 -2
- data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +5 -9
- data/lib/graphql/define/assign_enum_value.rb +1 -1
- data/lib/graphql/define/assign_global_id_field.rb +2 -2
- data/lib/graphql/define/assign_object_field.rb +3 -3
- data/lib/graphql/define/defined_object_proxy.rb +3 -0
- data/lib/graphql/define/instance_definable.rb +18 -108
- data/lib/graphql/directive/deprecated_directive.rb +1 -12
- data/lib/graphql/directive.rb +8 -1
- data/lib/graphql/enum_type.rb +5 -71
- data/lib/graphql/execution/directive_checks.rb +2 -2
- data/lib/graphql/execution/errors.rb +2 -3
- data/lib/graphql/execution/execute.rb +1 -1
- data/lib/graphql/execution/instrumentation.rb +1 -1
- data/lib/graphql/execution/interpreter/argument_value.rb +28 -0
- data/lib/graphql/execution/interpreter/arguments.rb +51 -0
- data/lib/graphql/execution/interpreter/arguments_cache.rb +79 -0
- data/lib/graphql/execution/interpreter/handles_raw_value.rb +25 -0
- data/lib/graphql/execution/interpreter/runtime.rb +227 -254
- data/lib/graphql/execution/interpreter.rb +34 -11
- data/lib/graphql/execution/lazy/lazy_method_map.rb +4 -0
- data/lib/graphql/execution/lookahead.rb +39 -114
- data/lib/graphql/execution/multiplex.rb +14 -5
- data/lib/graphql/field.rb +14 -118
- data/lib/graphql/filter.rb +1 -1
- data/lib/graphql/function.rb +1 -30
- data/lib/graphql/input_object_type.rb +6 -24
- data/lib/graphql/integer_decoding_error.rb +17 -0
- data/lib/graphql/interface_type.rb +7 -23
- data/lib/graphql/internal_representation/scope.rb +2 -2
- data/lib/graphql/internal_representation/visit.rb +2 -2
- data/lib/graphql/introspection/base_object.rb +2 -5
- data/lib/graphql/introspection/directive_type.rb +1 -1
- data/lib/graphql/introspection/entry_points.rb +7 -7
- data/lib/graphql/introspection/field_type.rb +7 -3
- data/lib/graphql/introspection/input_value_type.rb +33 -9
- data/lib/graphql/introspection/introspection_query.rb +6 -92
- data/lib/graphql/introspection/schema_type.rb +4 -9
- data/lib/graphql/introspection/type_type.rb +11 -7
- data/lib/graphql/introspection.rb +96 -0
- data/lib/graphql/invalid_null_error.rb +18 -0
- data/lib/graphql/language/block_string.rb +24 -5
- data/lib/graphql/language/definition_slice.rb +21 -10
- data/lib/graphql/language/document_from_schema_definition.rb +89 -64
- data/lib/graphql/language/lexer.rb +7 -3
- data/lib/graphql/language/lexer.rl +7 -3
- data/lib/graphql/language/nodes.rb +52 -91
- data/lib/graphql/language/parser.rb +719 -717
- data/lib/graphql/language/parser.y +104 -98
- data/lib/graphql/language/printer.rb +1 -1
- data/lib/graphql/language/sanitized_printer.rb +222 -0
- data/lib/graphql/language/visitor.rb +2 -2
- data/lib/graphql/language.rb +2 -1
- data/lib/graphql/name_validator.rb +6 -7
- data/lib/graphql/non_null_type.rb +0 -10
- data/lib/graphql/object_type.rb +45 -56
- data/lib/graphql/pagination/active_record_relation_connection.rb +41 -0
- data/lib/graphql/pagination/array_connection.rb +77 -0
- data/lib/graphql/pagination/connection.rb +208 -0
- data/lib/graphql/pagination/connections.rb +145 -0
- data/lib/graphql/pagination/mongoid_relation_connection.rb +25 -0
- data/lib/graphql/pagination/relation_connection.rb +185 -0
- data/lib/graphql/pagination/sequel_dataset_connection.rb +28 -0
- data/lib/graphql/pagination.rb +6 -0
- data/lib/graphql/query/arguments.rb +4 -2
- data/lib/graphql/query/context.rb +36 -9
- data/lib/graphql/query/fingerprint.rb +26 -0
- data/lib/graphql/query/input_validation_result.rb +23 -6
- data/lib/graphql/query/literal_input.rb +30 -10
- data/lib/graphql/query/null_context.rb +5 -1
- data/lib/graphql/query/validation_pipeline.rb +4 -1
- data/lib/graphql/query/variable_validation_error.rb +1 -1
- data/lib/graphql/query/variables.rb +16 -7
- data/lib/graphql/query.rb +64 -15
- data/lib/graphql/rake_task/validate.rb +3 -0
- data/lib/graphql/rake_task.rb +9 -9
- data/lib/graphql/relay/array_connection.rb +10 -12
- data/lib/graphql/relay/base_connection.rb +23 -13
- data/lib/graphql/relay/connection_type.rb +2 -1
- data/lib/graphql/relay/edge_type.rb +1 -0
- data/lib/graphql/relay/edges_instrumentation.rb +1 -1
- data/lib/graphql/relay/mutation.rb +1 -86
- data/lib/graphql/relay/node.rb +2 -2
- data/lib/graphql/relay/range_add.rb +14 -5
- data/lib/graphql/relay/relation_connection.rb +8 -10
- data/lib/graphql/scalar_type.rb +15 -59
- data/lib/graphql/schema/argument.rb +113 -11
- data/lib/graphql/schema/base_64_encoder.rb +2 -0
- data/lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb +1 -1
- data/lib/graphql/schema/build_from_definition/resolve_map.rb +13 -5
- data/lib/graphql/schema/build_from_definition.rb +212 -190
- data/lib/graphql/schema/built_in_types.rb +5 -5
- data/lib/graphql/schema/default_type_error.rb +2 -0
- data/lib/graphql/schema/directive/deprecated.rb +18 -0
- data/lib/graphql/schema/directive/include.rb +1 -1
- data/lib/graphql/schema/directive/skip.rb +1 -1
- data/lib/graphql/schema/directive.rb +34 -3
- data/lib/graphql/schema/enum.rb +52 -4
- data/lib/graphql/schema/enum_value.rb +6 -1
- data/lib/graphql/schema/field/connection_extension.rb +44 -20
- data/lib/graphql/schema/field/scope_extension.rb +1 -1
- data/lib/graphql/schema/field.rb +200 -129
- data/lib/graphql/schema/find_inherited_value.rb +13 -0
- data/lib/graphql/schema/finder.rb +13 -11
- data/lib/graphql/schema/input_object.rb +131 -22
- data/lib/graphql/schema/interface.rb +26 -8
- data/lib/graphql/schema/introspection_system.rb +108 -37
- data/lib/graphql/schema/late_bound_type.rb +3 -2
- data/lib/graphql/schema/list.rb +47 -0
- data/lib/graphql/schema/loader.rb +134 -96
- data/lib/graphql/schema/member/base_dsl_methods.rb +29 -12
- data/lib/graphql/schema/member/build_type.rb +19 -5
- data/lib/graphql/schema/member/cached_graphql_definition.rb +5 -0
- data/lib/graphql/schema/member/has_arguments.rb +105 -5
- data/lib/graphql/schema/member/has_ast_node.rb +20 -0
- data/lib/graphql/schema/member/has_fields.rb +20 -10
- data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
- data/lib/graphql/schema/member/type_system_helpers.rb +2 -2
- data/lib/graphql/schema/member/validates_input.rb +33 -0
- data/lib/graphql/schema/member.rb +6 -0
- data/lib/graphql/schema/mutation.rb +5 -1
- data/lib/graphql/schema/non_null.rb +30 -0
- data/lib/graphql/schema/object.rb +65 -12
- data/lib/graphql/schema/possible_types.rb +9 -4
- data/lib/graphql/schema/printer.rb +0 -15
- data/lib/graphql/schema/relay_classic_mutation.rb +5 -3
- data/lib/graphql/schema/resolver/has_payload_type.rb +5 -2
- data/lib/graphql/schema/resolver.rb +26 -18
- data/lib/graphql/schema/scalar.rb +27 -3
- data/lib/graphql/schema/subscription.rb +8 -18
- data/lib/graphql/schema/timeout.rb +29 -15
- data/lib/graphql/schema/traversal.rb +1 -1
- data/lib/graphql/schema/type_expression.rb +21 -13
- data/lib/graphql/schema/type_membership.rb +2 -2
- data/lib/graphql/schema/union.rb +37 -3
- data/lib/graphql/schema/unique_within_type.rb +1 -2
- data/lib/graphql/schema/validation.rb +10 -2
- data/lib/graphql/schema/warden.rb +115 -29
- data/lib/graphql/schema.rb +903 -195
- data/lib/graphql/static_validation/all_rules.rb +1 -0
- data/lib/graphql/static_validation/base_visitor.rb +10 -6
- data/lib/graphql/static_validation/literal_validator.rb +52 -27
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +43 -83
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +17 -5
- data/lib/graphql/static_validation/rules/arguments_are_defined.rb +33 -25
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +1 -1
- data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +4 -4
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +5 -5
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +29 -21
- data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -3
- data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +30 -0
- data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +30 -0
- data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +2 -2
- data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +4 -5
- data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +12 -13
- data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +5 -6
- data/lib/graphql/static_validation/rules/variables_are_input_types.rb +1 -1
- data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +5 -3
- data/lib/graphql/static_validation/type_stack.rb +2 -2
- data/lib/graphql/static_validation/validation_context.rb +1 -1
- data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
- data/lib/graphql/static_validation/validator.rb +30 -8
- data/lib/graphql/static_validation.rb +1 -0
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +89 -19
- data/lib/graphql/subscriptions/broadcast_analyzer.rb +84 -0
- data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +21 -0
- data/lib/graphql/subscriptions/event.rb +23 -5
- data/lib/graphql/subscriptions/instrumentation.rb +10 -5
- data/lib/graphql/subscriptions/serialize.rb +22 -4
- data/lib/graphql/subscriptions/subscription_root.rb +15 -5
- data/lib/graphql/subscriptions.rb +108 -35
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +14 -10
- data/lib/graphql/tracing/appoptics_tracing.rb +171 -0
- data/lib/graphql/tracing/appsignal_tracing.rb +8 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +8 -0
- data/lib/graphql/tracing/new_relic_tracing.rb +9 -12
- data/lib/graphql/tracing/platform_tracing.rb +53 -9
- data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +4 -1
- data/lib/graphql/tracing/prometheus_tracing.rb +8 -0
- data/lib/graphql/tracing/scout_tracing.rb +19 -0
- data/lib/graphql/tracing/skylight_tracing.rb +8 -0
- data/lib/graphql/tracing/statsd_tracing.rb +42 -0
- data/lib/graphql/tracing.rb +14 -34
- data/lib/graphql/types/big_int.rb +1 -1
- data/lib/graphql/types/int.rb +9 -2
- data/lib/graphql/types/iso_8601_date.rb +3 -3
- data/lib/graphql/types/iso_8601_date_time.rb +25 -10
- data/lib/graphql/types/relay/base_connection.rb +11 -7
- data/lib/graphql/types/relay/base_edge.rb +2 -1
- data/lib/graphql/types/string.rb +7 -1
- data/lib/graphql/unauthorized_error.rb +1 -1
- data/lib/graphql/union_type.rb +13 -28
- data/lib/graphql/unresolved_type_error.rb +2 -2
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +31 -6
- data/readme.md +1 -1
- metadata +34 -9
- data/lib/graphql/literal_validation_error.rb +0 -6
@@ -2,10 +2,10 @@ class GraphQL::Language::Parser
|
|
2
2
|
rule
|
3
3
|
target: document
|
4
4
|
|
5
|
-
document: definitions_list {
|
5
|
+
document: definitions_list { result = make_node(:Document, definitions: val[0])}
|
6
6
|
|
7
7
|
definitions_list:
|
8
|
-
definition {
|
8
|
+
definition { result = [val[0]]}
|
9
9
|
| definitions_list definition { val[0] << val[1] }
|
10
10
|
|
11
11
|
definition:
|
@@ -19,7 +19,7 @@ rule
|
|
19
19
|
|
20
20
|
operation_definition:
|
21
21
|
operation_type operation_name_opt variable_definitions_opt directives_list_opt selection_set {
|
22
|
-
|
22
|
+
result = make_node(
|
23
23
|
:OperationDefinition, {
|
24
24
|
operation_type: val[0],
|
25
25
|
name: val[1],
|
@@ -31,7 +31,7 @@ rule
|
|
31
31
|
)
|
32
32
|
}
|
33
33
|
| LCURLY selection_list RCURLY {
|
34
|
-
|
34
|
+
result = make_node(
|
35
35
|
:OperationDefinition, {
|
36
36
|
operation_type: "query",
|
37
37
|
selections: val[1],
|
@@ -40,7 +40,7 @@ rule
|
|
40
40
|
)
|
41
41
|
}
|
42
42
|
| LCURLY RCURLY {
|
43
|
-
|
43
|
+
result = make_node(
|
44
44
|
:OperationDefinition, {
|
45
45
|
operation_type: "query",
|
46
46
|
selections: [],
|
@@ -55,20 +55,20 @@ rule
|
|
55
55
|
| SUBSCRIPTION
|
56
56
|
|
57
57
|
operation_name_opt:
|
58
|
-
/* none */ {
|
58
|
+
/* none */ { result = nil }
|
59
59
|
| name
|
60
60
|
|
61
61
|
variable_definitions_opt:
|
62
|
-
/* none */ {
|
63
|
-
| LPAREN variable_definitions_list RPAREN {
|
62
|
+
/* none */ { result = EMPTY_ARRAY }
|
63
|
+
| LPAREN variable_definitions_list RPAREN { result = val[1] }
|
64
64
|
|
65
65
|
variable_definitions_list:
|
66
|
-
variable_definition {
|
66
|
+
variable_definition { result = [val[0]] }
|
67
67
|
| variable_definitions_list variable_definition { val[0] << val[1] }
|
68
68
|
|
69
69
|
variable_definition:
|
70
70
|
VAR_SIGN name COLON type default_value_opt {
|
71
|
-
|
71
|
+
result = make_node(:VariableDefinition, {
|
72
72
|
name: val[1],
|
73
73
|
type: val[3],
|
74
74
|
default_value: val[4],
|
@@ -77,23 +77,26 @@ rule
|
|
77
77
|
}
|
78
78
|
|
79
79
|
type:
|
80
|
-
|
81
|
-
|
|
82
|
-
|
80
|
+
nullable_type { result = val[0] }
|
81
|
+
| nullable_type BANG { result = make_node(:NonNullType, of_type: val[0]) }
|
82
|
+
|
83
|
+
nullable_type:
|
84
|
+
name { result = make_node(:TypeName, name: val[0])}
|
85
|
+
| LBRACKET type RBRACKET { result = make_node(:ListType, of_type: val[1]) }
|
83
86
|
|
84
87
|
default_value_opt:
|
85
|
-
/* none */ {
|
86
|
-
| EQUALS literal_value {
|
88
|
+
/* none */ { result = nil }
|
89
|
+
| EQUALS literal_value { result = val[1] }
|
87
90
|
|
88
91
|
selection_set:
|
89
|
-
LCURLY selection_list RCURLY {
|
92
|
+
LCURLY selection_list RCURLY { result = val[1] }
|
90
93
|
|
91
94
|
selection_set_opt:
|
92
|
-
/* none */ {
|
93
|
-
| selection_set {
|
95
|
+
/* none */ { result = EMPTY_ARRAY }
|
96
|
+
| selection_set { result = val[0] }
|
94
97
|
|
95
98
|
selection_list:
|
96
|
-
selection {
|
99
|
+
selection { result = [result] }
|
97
100
|
| selection_list selection { val[0] << val[1] }
|
98
101
|
|
99
102
|
selection:
|
@@ -103,7 +106,7 @@ rule
|
|
103
106
|
|
104
107
|
field:
|
105
108
|
name arguments_opt directives_list_opt selection_set_opt {
|
106
|
-
|
109
|
+
result = make_node(
|
107
110
|
:Field, {
|
108
111
|
name: val[0],
|
109
112
|
arguments: val[1],
|
@@ -114,7 +117,7 @@ rule
|
|
114
117
|
)
|
115
118
|
}
|
116
119
|
| name COLON name arguments_opt directives_list_opt selection_set_opt {
|
117
|
-
|
120
|
+
result = make_node(
|
118
121
|
:Field, {
|
119
122
|
alias: val[0],
|
120
123
|
name: val[2],
|
@@ -157,92 +160,91 @@ rule
|
|
157
160
|
| schema_keyword
|
158
161
|
|
159
162
|
enum_value_definition:
|
160
|
-
description_opt enum_name directives_list_opt {
|
163
|
+
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]) }
|
161
164
|
|
162
165
|
enum_value_definitions:
|
163
|
-
enum_value_definition {
|
164
|
-
| enum_value_definitions enum_value_definition {
|
166
|
+
enum_value_definition { result = [val[0]] }
|
167
|
+
| enum_value_definitions enum_value_definition { result = val[0] << val[1] }
|
165
168
|
|
166
169
|
arguments_opt:
|
167
|
-
/* none */ {
|
168
|
-
| LPAREN RPAREN
|
169
|
-
| LPAREN arguments_list RPAREN { return val[1] }
|
170
|
+
/* none */ { result = EMPTY_ARRAY }
|
171
|
+
| LPAREN arguments_list RPAREN { result = val[1] }
|
170
172
|
|
171
173
|
arguments_list:
|
172
|
-
argument {
|
174
|
+
argument { result = [val[0]] }
|
173
175
|
| arguments_list argument { val[0] << val[1] }
|
174
176
|
|
175
177
|
argument:
|
176
|
-
name COLON input_value {
|
178
|
+
name COLON input_value { result = make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
|
177
179
|
|
178
180
|
literal_value:
|
179
|
-
FLOAT {
|
180
|
-
| INT {
|
181
|
-
| STRING {
|
182
|
-
| TRUE {
|
183
|
-
| FALSE {
|
181
|
+
FLOAT { result = val[0].to_f }
|
182
|
+
| INT { result = val[0].to_i }
|
183
|
+
| STRING { result = val[0].to_s }
|
184
|
+
| TRUE { result = true }
|
185
|
+
| FALSE { result = false }
|
184
186
|
| null_value
|
185
187
|
| enum_value
|
186
188
|
| list_value
|
187
189
|
| object_literal_value
|
188
190
|
|
189
191
|
input_value:
|
190
|
-
|
192
|
+
literal_value
|
191
193
|
| variable
|
192
194
|
| object_value
|
193
195
|
|
194
|
-
null_value: NULL {
|
195
|
-
variable: VAR_SIGN name {
|
196
|
+
null_value: NULL { result = make_node(:NullValue, name: val[0], position_source: val[0]) }
|
197
|
+
variable: VAR_SIGN name { result = make_node(:VariableIdentifier, name: val[1], position_source: val[0]) }
|
196
198
|
|
197
199
|
list_value:
|
198
|
-
LBRACKET RBRACKET {
|
199
|
-
| LBRACKET list_value_list RBRACKET {
|
200
|
+
LBRACKET RBRACKET { result = EMPTY_ARRAY }
|
201
|
+
| LBRACKET list_value_list RBRACKET { result = val[1] }
|
200
202
|
|
201
203
|
list_value_list:
|
202
|
-
input_value {
|
204
|
+
input_value { result = [val[0]] }
|
203
205
|
| list_value_list input_value { val[0] << val[1] }
|
204
206
|
|
205
207
|
object_value:
|
206
|
-
LCURLY RCURLY {
|
207
|
-
| LCURLY object_value_list RCURLY {
|
208
|
+
LCURLY RCURLY { result = make_node(:InputObject, arguments: [], position_source: val[0])}
|
209
|
+
| LCURLY object_value_list RCURLY { result = make_node(:InputObject, arguments: val[1], position_source: val[0])}
|
208
210
|
|
209
211
|
object_value_list:
|
210
|
-
object_value_field {
|
212
|
+
object_value_field { result = [val[0]] }
|
211
213
|
| object_value_list object_value_field { val[0] << val[1] }
|
212
214
|
|
213
215
|
object_value_field:
|
214
|
-
name COLON input_value {
|
216
|
+
name COLON input_value { result = make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
|
215
217
|
|
216
218
|
/* like the previous, but with literals only: */
|
217
219
|
object_literal_value:
|
218
|
-
LCURLY RCURLY {
|
219
|
-
| LCURLY object_literal_value_list RCURLY {
|
220
|
+
LCURLY RCURLY { result = make_node(:InputObject, arguments: [], position_source: val[0])}
|
221
|
+
| LCURLY object_literal_value_list RCURLY { result = make_node(:InputObject, arguments: val[1], position_source: val[0])}
|
220
222
|
|
221
223
|
object_literal_value_list:
|
222
|
-
object_literal_value_field {
|
224
|
+
object_literal_value_field { result = [val[0]] }
|
223
225
|
| object_literal_value_list object_literal_value_field { val[0] << val[1] }
|
224
226
|
|
225
227
|
object_literal_value_field:
|
226
|
-
name COLON literal_value {
|
228
|
+
name COLON literal_value { result = make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
|
227
229
|
|
228
|
-
enum_value: enum_name {
|
230
|
+
enum_value: enum_name { result = make_node(:Enum, name: val[0], position_source: val[0]) }
|
229
231
|
|
230
232
|
directives_list_opt:
|
231
|
-
/* none */ {
|
233
|
+
/* none */ { result = EMPTY_ARRAY }
|
232
234
|
| directives_list
|
233
235
|
|
234
236
|
directives_list:
|
235
|
-
directive {
|
237
|
+
directive { result = [val[0]] }
|
236
238
|
| directives_list directive { val[0] << val[1] }
|
237
239
|
|
238
|
-
directive: DIR_SIGN name arguments_opt {
|
240
|
+
directive: DIR_SIGN name arguments_opt { result = make_node(:Directive, name: val[1], arguments: val[2], position_source: val[0]) }
|
239
241
|
|
240
242
|
fragment_spread:
|
241
|
-
ELLIPSIS name_without_on directives_list_opt {
|
243
|
+
ELLIPSIS name_without_on directives_list_opt { result = make_node(:FragmentSpread, name: val[1], directives: val[2], position_source: val[0]) }
|
242
244
|
|
243
245
|
inline_fragment:
|
244
246
|
ELLIPSIS ON type directives_list_opt selection_set {
|
245
|
-
|
247
|
+
result = make_node(:InlineFragment, {
|
246
248
|
type: val[2],
|
247
249
|
directives: val[3],
|
248
250
|
selections: val[4],
|
@@ -250,7 +252,7 @@ rule
|
|
250
252
|
})
|
251
253
|
}
|
252
254
|
| ELLIPSIS directives_list_opt selection_set {
|
253
|
-
|
255
|
+
result = make_node(:InlineFragment, {
|
254
256
|
type: nil,
|
255
257
|
directives: val[1],
|
256
258
|
selections: val[2],
|
@@ -260,7 +262,7 @@ rule
|
|
260
262
|
|
261
263
|
fragment_definition:
|
262
264
|
FRAGMENT fragment_name_opt ON type directives_list_opt selection_set {
|
263
|
-
|
265
|
+
result = make_node(:FragmentDefinition, {
|
264
266
|
name: val[1],
|
265
267
|
type: val[3],
|
266
268
|
directives: val[4],
|
@@ -271,7 +273,7 @@ rule
|
|
271
273
|
}
|
272
274
|
|
273
275
|
fragment_name_opt:
|
274
|
-
/* none */ {
|
276
|
+
/* none */ { result = nil }
|
275
277
|
| name_without_on
|
276
278
|
|
277
279
|
type_system_definition:
|
@@ -280,14 +282,14 @@ rule
|
|
280
282
|
| directive_definition
|
281
283
|
|
282
284
|
schema_definition:
|
283
|
-
SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY {
|
285
|
+
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]) }
|
284
286
|
|
285
287
|
operation_type_definition_list:
|
286
288
|
operation_type_definition
|
287
|
-
| operation_type_definition_list operation_type_definition {
|
289
|
+
| operation_type_definition_list operation_type_definition { result = val[0].merge(val[1]) }
|
288
290
|
|
289
291
|
operation_type_definition:
|
290
|
-
operation_type COLON name {
|
292
|
+
operation_type COLON name { result = { val[0].to_s.to_sym => val[2] } }
|
291
293
|
|
292
294
|
type_definition:
|
293
295
|
scalar_type_definition
|
@@ -302,8 +304,8 @@ rule
|
|
302
304
|
| type_extension
|
303
305
|
|
304
306
|
schema_extension:
|
305
|
-
EXTEND SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY {
|
306
|
-
| EXTEND SCHEMA directives_list {
|
307
|
+
EXTEND SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY { result = make_node(:SchemaExtension, position_source: val[0], directives: val[2], **val[4]) }
|
308
|
+
| EXTEND SCHEMA directives_list { result = make_node(:SchemaExtension, position_source: val[0], directives: val[2]) }
|
307
309
|
|
308
310
|
type_extension:
|
309
311
|
scalar_type_extension
|
@@ -313,30 +315,30 @@ rule
|
|
313
315
|
| enum_type_extension
|
314
316
|
| input_object_type_extension
|
315
317
|
|
316
|
-
scalar_type_extension: EXTEND SCALAR name directives_list {
|
318
|
+
scalar_type_extension: EXTEND SCALAR name directives_list { result = make_node(:ScalarTypeExtension, name: val[2], directives: val[3], position_source: val[0]) }
|
317
319
|
|
318
320
|
object_type_extension:
|
319
321
|
/* TODO - This first one shouldn't be necessary but parser is getting confused */
|
320
|
-
EXTEND TYPE name implements LCURLY field_definition_list RCURLY {
|
321
|
-
| EXTEND TYPE name implements_opt directives_list_opt LCURLY field_definition_list RCURLY {
|
322
|
-
| EXTEND TYPE name implements_opt directives_list {
|
323
|
-
| EXTEND TYPE name implements {
|
322
|
+
EXTEND TYPE name implements LCURLY field_definition_list RCURLY { result = make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: [], fields: val[5], position_source: val[0]) }
|
323
|
+
| EXTEND TYPE name implements_opt directives_list_opt LCURLY field_definition_list RCURLY { result = make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: val[4], fields: val[6], position_source: val[0]) }
|
324
|
+
| EXTEND TYPE name implements_opt directives_list { result = make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: val[4], fields: [], position_source: val[0]) }
|
325
|
+
| EXTEND TYPE name implements { result = make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: [], fields: [], position_source: val[0]) }
|
324
326
|
|
325
327
|
interface_type_extension:
|
326
|
-
EXTEND INTERFACE name directives_list_opt LCURLY field_definition_list RCURLY {
|
327
|
-
| EXTEND INTERFACE name directives_list {
|
328
|
+
EXTEND INTERFACE name directives_list_opt LCURLY field_definition_list RCURLY { result = make_node(:InterfaceTypeExtension, name: val[2], directives: val[3], fields: val[5], position_source: val[0]) }
|
329
|
+
| EXTEND INTERFACE name directives_list { result = make_node(:InterfaceTypeExtension, name: val[2], directives: val[3], fields: [], position_source: val[0]) }
|
328
330
|
|
329
331
|
union_type_extension:
|
330
|
-
EXTEND UNION name directives_list_opt EQUALS union_members {
|
331
|
-
| EXTEND UNION name directives_list {
|
332
|
+
EXTEND UNION name directives_list_opt EQUALS union_members { result = make_node(:UnionTypeExtension, name: val[2], directives: val[3], types: val[5], position_source: val[0]) }
|
333
|
+
| EXTEND UNION name directives_list { result = make_node(:UnionTypeExtension, name: val[2], directives: val[3], types: [], position_source: val[0]) }
|
332
334
|
|
333
335
|
enum_type_extension:
|
334
|
-
EXTEND ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY {
|
335
|
-
| EXTEND ENUM name directives_list {
|
336
|
+
EXTEND ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY { result = make_node(:EnumTypeExtension, name: val[2], directives: val[3], values: val[5], position_source: val[0]) }
|
337
|
+
| EXTEND ENUM name directives_list { result = make_node(:EnumTypeExtension, name: val[2], directives: val[3], values: [], position_source: val[0]) }
|
336
338
|
|
337
339
|
input_object_type_extension:
|
338
|
-
EXTEND INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY {
|
339
|
-
| EXTEND INPUT name directives_list {
|
340
|
+
EXTEND INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY { result = make_node(:InputObjectTypeExtension, name: val[2], directives: val[3], fields: val[5], position_source: val[0]) }
|
341
|
+
| EXTEND INPUT name directives_list { result = make_node(:InputObjectTypeExtension, name: val[2], directives: val[3], fields: [], position_source: val[0]) }
|
340
342
|
|
341
343
|
description: STRING
|
342
344
|
|
@@ -346,85 +348,85 @@ rule
|
|
346
348
|
|
347
349
|
scalar_type_definition:
|
348
350
|
description_opt SCALAR name directives_list_opt {
|
349
|
-
|
351
|
+
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])
|
350
352
|
}
|
351
353
|
|
352
354
|
object_type_definition:
|
353
355
|
description_opt TYPE name implements_opt directives_list_opt LCURLY field_definition_list RCURLY {
|
354
|
-
|
356
|
+
result = make_node(:ObjectTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[6], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
355
357
|
}
|
356
358
|
|
357
359
|
implements_opt:
|
358
|
-
/* none */ {
|
360
|
+
/* none */ { result = EMPTY_ARRAY }
|
359
361
|
| implements
|
360
362
|
|
361
363
|
implements:
|
362
|
-
IMPLEMENTS AMP interfaces_list {
|
363
|
-
| IMPLEMENTS interfaces_list {
|
364
|
-
| IMPLEMENTS legacy_interfaces_list {
|
364
|
+
IMPLEMENTS AMP interfaces_list { result = val[2] }
|
365
|
+
| IMPLEMENTS interfaces_list { result = val[1] }
|
366
|
+
| IMPLEMENTS legacy_interfaces_list { result = val[1] }
|
365
367
|
|
366
368
|
interfaces_list:
|
367
|
-
name {
|
369
|
+
name { result = [make_node(:TypeName, name: val[0], position_source: val[0])] }
|
368
370
|
| interfaces_list AMP name { val[0] << make_node(:TypeName, name: val[2], position_source: val[2]) }
|
369
371
|
|
370
372
|
legacy_interfaces_list:
|
371
|
-
name {
|
373
|
+
name { result = [make_node(:TypeName, name: val[0], position_source: val[0])] }
|
372
374
|
| legacy_interfaces_list name { val[0] << make_node(:TypeName, name: val[1], position_source: val[1]) }
|
373
375
|
|
374
376
|
input_value_definition:
|
375
377
|
description_opt name COLON type default_value_opt directives_list_opt {
|
376
|
-
|
378
|
+
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])
|
377
379
|
}
|
378
380
|
|
379
381
|
input_value_definition_list:
|
380
|
-
input_value_definition {
|
382
|
+
input_value_definition { result = [val[0]] }
|
381
383
|
| input_value_definition_list input_value_definition { val[0] << val[1] }
|
382
384
|
|
383
385
|
arguments_definitions_opt:
|
384
|
-
/* none */ {
|
385
|
-
| LPAREN input_value_definition_list RPAREN {
|
386
|
+
/* none */ { result = EMPTY_ARRAY }
|
387
|
+
| LPAREN input_value_definition_list RPAREN { result = val[1] }
|
386
388
|
|
387
389
|
field_definition:
|
388
390
|
description_opt name arguments_definitions_opt COLON type directives_list_opt {
|
389
|
-
|
391
|
+
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])
|
390
392
|
}
|
391
393
|
|
392
394
|
field_definition_list:
|
393
|
-
/* none */ {
|
394
|
-
| field_definition {
|
395
|
+
/* none */ { result = EMPTY_ARRAY }
|
396
|
+
| field_definition { result = [val[0]] }
|
395
397
|
| field_definition_list field_definition { val[0] << val[1] }
|
396
398
|
|
397
399
|
interface_type_definition:
|
398
400
|
description_opt INTERFACE name directives_list_opt LCURLY field_definition_list RCURLY {
|
399
|
-
|
401
|
+
result = make_node(:InterfaceTypeDefinition, 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])
|
400
402
|
}
|
401
403
|
|
402
404
|
union_members:
|
403
|
-
name {
|
405
|
+
name { result = [make_node(:TypeName, name: val[0], position_source: val[0])]}
|
404
406
|
| union_members PIPE name { val[0] << make_node(:TypeName, name: val[2], position_source: val[2]) }
|
405
407
|
|
406
408
|
union_type_definition:
|
407
409
|
description_opt UNION name directives_list_opt EQUALS union_members {
|
408
|
-
|
410
|
+
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])
|
409
411
|
}
|
410
412
|
|
411
413
|
enum_type_definition:
|
412
414
|
description_opt ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY {
|
413
|
-
|
415
|
+
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])
|
414
416
|
}
|
415
417
|
|
416
418
|
input_object_type_definition:
|
417
419
|
description_opt INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY {
|
418
|
-
|
420
|
+
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])
|
419
421
|
}
|
420
422
|
|
421
423
|
directive_definition:
|
422
424
|
description_opt DIRECTIVE DIR_SIGN name arguments_definitions_opt ON directive_locations {
|
423
|
-
|
425
|
+
result = make_node(:DirectiveDefinition, name: val[3], arguments: val[4], locations: val[6], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
424
426
|
}
|
425
427
|
|
426
428
|
directive_locations:
|
427
|
-
name {
|
429
|
+
name { result = [make_node(:DirectiveLocation, name: val[0].to_s, position_source: val[0])] }
|
428
430
|
| directive_locations PIPE name { val[0] << make_node(:DirectiveLocation, name: val[2].to_s, position_source: val[2]) }
|
429
431
|
end
|
430
432
|
|
@@ -452,7 +454,7 @@ def parse_document
|
|
452
454
|
# From the tokens, build an AST
|
453
455
|
@tracer.trace("parse", {query_string: @query_string}) do
|
454
456
|
if @tokens.empty?
|
455
|
-
|
457
|
+
raise GraphQL::ParseError.new("Unexpected end of document", nil, nil, @query_string)
|
456
458
|
else
|
457
459
|
do_parse
|
458
460
|
end
|
@@ -464,6 +466,10 @@ def self.parse(query_string, filename: nil, tracer: GraphQL::Tracing::NullTracer
|
|
464
466
|
self.new(query_string, filename: filename, tracer: tracer).parse_document
|
465
467
|
end
|
466
468
|
|
469
|
+
def self.parse_file(filename, tracer: GraphQL::Tracing::NullTracer)
|
470
|
+
self.parse(File.read(filename), filename: filename, tracer: tracer)
|
471
|
+
end
|
472
|
+
|
467
473
|
private
|
468
474
|
|
469
475
|
def next_token
|
@@ -93,7 +93,7 @@ module GraphQL
|
|
93
93
|
end
|
94
94
|
|
95
95
|
def print_input_object(input_object)
|
96
|
-
"{#{input_object.arguments.map { |a|
|
96
|
+
"{#{input_object.arguments.map { |a| print_argument(a) }.join(", ")}}"
|
97
97
|
end
|
98
98
|
|
99
99
|
def print_list_type(list_type)
|