graphql 1.12.21 → 1.13.2
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.
- checksums.yaml +4 -4
- data/lib/generators/graphql/core.rb +3 -1
- data/lib/generators/graphql/install_generator.rb +9 -2
- data/lib/generators/graphql/mutation_generator.rb +1 -1
- data/lib/generators/graphql/type_generator.rb +0 -1
- data/lib/graphql/analysis/ast/field_usage.rb +2 -2
- data/lib/graphql/analysis/ast/query_complexity.rb +10 -14
- data/lib/graphql/analysis/ast/visitor.rb +4 -4
- data/lib/graphql/backtrace/table.rb +1 -1
- data/lib/graphql/base_type.rb +4 -2
- data/lib/graphql/boolean_type.rb +1 -1
- data/lib/graphql/dataloader.rb +55 -22
- data/lib/graphql/directive/deprecated_directive.rb +1 -1
- data/lib/graphql/directive/include_directive.rb +1 -1
- data/lib/graphql/directive/skip_directive.rb +1 -1
- data/lib/graphql/directive.rb +0 -4
- data/lib/graphql/enum_type.rb +5 -1
- data/lib/graphql/execution/errors.rb +1 -0
- data/lib/graphql/execution/interpreter/arguments.rb +1 -1
- data/lib/graphql/execution/interpreter/arguments_cache.rb +2 -2
- data/lib/graphql/execution/interpreter/runtime.rb +31 -19
- data/lib/graphql/execution/lookahead.rb +2 -2
- data/lib/graphql/execution/multiplex.rb +4 -1
- data/lib/graphql/float_type.rb +1 -1
- data/lib/graphql/id_type.rb +1 -1
- data/lib/graphql/int_type.rb +1 -1
- data/lib/graphql/introspection/directive_type.rb +1 -1
- data/lib/graphql/introspection/entry_points.rb +2 -2
- data/lib/graphql/introspection/enum_value_type.rb +2 -2
- data/lib/graphql/introspection/field_type.rb +2 -2
- data/lib/graphql/introspection/input_value_type.rb +4 -4
- data/lib/graphql/introspection/schema_type.rb +2 -2
- data/lib/graphql/introspection/type_type.rb +10 -10
- data/lib/graphql/language/block_string.rb +2 -6
- data/lib/graphql/language/document_from_schema_definition.rb +4 -2
- data/lib/graphql/language/lexer.rb +0 -3
- data/lib/graphql/language/lexer.rl +0 -4
- data/lib/graphql/language/nodes.rb +12 -2
- data/lib/graphql/language/parser.rb +442 -434
- data/lib/graphql/language/parser.y +5 -4
- data/lib/graphql/language/printer.rb +6 -1
- data/lib/graphql/language/sanitized_printer.rb +5 -5
- data/lib/graphql/language/token.rb +0 -4
- data/lib/graphql/name_validator.rb +0 -4
- data/lib/graphql/query/arguments.rb +1 -1
- data/lib/graphql/query/arguments_cache.rb +1 -1
- data/lib/graphql/query/context.rb +15 -2
- data/lib/graphql/query/literal_input.rb +1 -1
- data/lib/graphql/query/null_context.rb +12 -7
- data/lib/graphql/query/serial_execution/field_resolution.rb +1 -1
- data/lib/graphql/query/variables.rb +5 -1
- data/lib/graphql/relay/edges_instrumentation.rb +0 -1
- data/lib/graphql/relay/global_id_resolve.rb +1 -1
- data/lib/graphql/relay/page_info.rb +1 -1
- data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
- data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
- data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
- data/lib/graphql/rubocop.rb +4 -0
- data/lib/graphql/schema/addition.rb +37 -28
- data/lib/graphql/schema/argument.rb +8 -6
- data/lib/graphql/schema/build_from_definition.rb +5 -5
- data/lib/graphql/schema/directive/feature.rb +1 -1
- data/lib/graphql/schema/directive/flagged.rb +2 -2
- data/lib/graphql/schema/directive/include.rb +1 -1
- data/lib/graphql/schema/directive/skip.rb +1 -1
- data/lib/graphql/schema/directive/transform.rb +1 -1
- data/lib/graphql/schema/directive.rb +7 -3
- data/lib/graphql/schema/enum.rb +60 -10
- data/lib/graphql/schema/enum_value.rb +6 -0
- data/lib/graphql/schema/field/connection_extension.rb +1 -1
- data/lib/graphql/schema/field.rb +126 -38
- data/lib/graphql/schema/field_extension.rb +52 -2
- data/lib/graphql/schema/find_inherited_value.rb +1 -0
- data/lib/graphql/schema/finder.rb +5 -5
- data/lib/graphql/schema/input_object.rb +8 -5
- data/lib/graphql/schema/interface.rb +11 -20
- data/lib/graphql/schema/introspection_system.rb +1 -1
- data/lib/graphql/schema/list.rb +3 -1
- data/lib/graphql/schema/member/accepts_definition.rb +15 -3
- data/lib/graphql/schema/member/build_type.rb +0 -4
- data/lib/graphql/schema/member/cached_graphql_definition.rb +29 -2
- data/lib/graphql/schema/member/has_arguments.rb +55 -13
- data/lib/graphql/schema/member/has_deprecation_reason.rb +1 -1
- data/lib/graphql/schema/member/has_fields.rb +76 -18
- data/lib/graphql/schema/member/has_interfaces.rb +90 -0
- data/lib/graphql/schema/member.rb +1 -0
- data/lib/graphql/schema/non_null.rb +3 -1
- data/lib/graphql/schema/object.rb +10 -75
- data/lib/graphql/schema/printer.rb +1 -1
- data/lib/graphql/schema/relay_classic_mutation.rb +37 -3
- data/lib/graphql/schema/resolver/has_payload_type.rb +27 -2
- data/lib/graphql/schema/resolver.rb +37 -17
- data/lib/graphql/schema/scalar.rb +2 -0
- data/lib/graphql/schema/subscription.rb +11 -1
- data/lib/graphql/schema/traversal.rb +1 -1
- data/lib/graphql/schema/type_expression.rb +1 -1
- data/lib/graphql/schema/type_membership.rb +18 -4
- data/lib/graphql/schema/union.rb +8 -1
- data/lib/graphql/schema/validator/format_validator.rb +0 -4
- data/lib/graphql/schema/validator/numericality_validator.rb +1 -0
- data/lib/graphql/schema/validator.rb +4 -7
- data/lib/graphql/schema/warden.rb +116 -52
- data/lib/graphql/schema.rb +106 -22
- data/lib/graphql/static_validation/base_visitor.rb +5 -5
- data/lib/graphql/static_validation/definition_dependencies.rb +0 -1
- data/lib/graphql/static_validation/literal_validator.rb +1 -1
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +1 -1
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +15 -8
- data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +3 -1
- data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +4 -4
- data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +7 -7
- data/lib/graphql/string_type.rb +1 -1
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +8 -4
- data/lib/graphql/subscriptions/event.rb +20 -12
- data/lib/graphql/subscriptions.rb +17 -19
- data/lib/graphql/types/relay/connection_behaviors.rb +26 -9
- data/lib/graphql/types/relay/default_relay.rb +5 -1
- data/lib/graphql/types/relay/edge_behaviors.rb +13 -2
- data/lib/graphql/types/relay/has_node_field.rb +1 -1
- data/lib/graphql/types/relay/has_nodes_field.rb +1 -1
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +10 -32
- metadata +10 -5
|
@@ -6,13 +6,13 @@ module GraphQL
|
|
|
6
6
|
description "Object and Interface types are described by a list of Fields, each of which has "\
|
|
7
7
|
"a name, potentially a list of arguments, and a return type."
|
|
8
8
|
field :name, String, null: false
|
|
9
|
-
field :description, String
|
|
9
|
+
field :description, String
|
|
10
10
|
field :args, [GraphQL::Schema::LateBoundType.new("__InputValue")], null: false do
|
|
11
11
|
argument :include_deprecated, Boolean, required: false, default_value: false
|
|
12
12
|
end
|
|
13
13
|
field :type, GraphQL::Schema::LateBoundType.new("__Type"), null: false
|
|
14
14
|
field :is_deprecated, Boolean, null: false
|
|
15
|
-
field :deprecation_reason, String
|
|
15
|
+
field :deprecation_reason, String
|
|
16
16
|
|
|
17
17
|
def is_deprecated
|
|
18
18
|
!!@object.deprecation_reason
|
|
@@ -7,11 +7,11 @@ module GraphQL
|
|
|
7
7
|
"InputObject are represented as Input Values which describe their type and "\
|
|
8
8
|
"optionally a default value."
|
|
9
9
|
field :name, String, null: false
|
|
10
|
-
field :description, String
|
|
10
|
+
field :description, String
|
|
11
11
|
field :type, GraphQL::Schema::LateBoundType.new("__Type"), null: false
|
|
12
|
-
field :default_value, String, "A GraphQL-formatted string representing the default value for this input value."
|
|
12
|
+
field :default_value, String, "A GraphQL-formatted string representing the default value for this input value."
|
|
13
13
|
field :is_deprecated, Boolean, null: false
|
|
14
|
-
field :deprecation_reason, String
|
|
14
|
+
field :deprecation_reason, String
|
|
15
15
|
|
|
16
16
|
def is_deprecated
|
|
17
17
|
!!@object.deprecation_reason
|
|
@@ -54,7 +54,7 @@ module GraphQL
|
|
|
54
54
|
elsif type.kind.input_object?
|
|
55
55
|
"{" +
|
|
56
56
|
value.map do |k, v|
|
|
57
|
-
arg_defn = type.
|
|
57
|
+
arg_defn = type.get_argument(k, context)
|
|
58
58
|
"#{k}: #{serialize_default_value(v, arg_defn.type)}"
|
|
59
59
|
end.join(", ") +
|
|
60
60
|
"}"
|
|
@@ -10,8 +10,8 @@ module GraphQL
|
|
|
10
10
|
|
|
11
11
|
field :types, [GraphQL::Schema::LateBoundType.new("__Type")], "A list of all types supported by this server.", null: false
|
|
12
12
|
field :query_type, GraphQL::Schema::LateBoundType.new("__Type"), "The type that query operations will be rooted at.", null: false
|
|
13
|
-
field :mutation_type, GraphQL::Schema::LateBoundType.new("__Type"), "If this server supports mutation, the type that mutation operations will be rooted at."
|
|
14
|
-
field :subscription_type, GraphQL::Schema::LateBoundType.new("__Type"), "If this server support subscription, the type that subscription operations will be rooted at."
|
|
13
|
+
field :mutation_type, GraphQL::Schema::LateBoundType.new("__Type"), "If this server supports mutation, the type that mutation operations will be rooted at."
|
|
14
|
+
field :subscription_type, GraphQL::Schema::LateBoundType.new("__Type"), "If this server support subscription, the type that subscription operations will be rooted at."
|
|
15
15
|
field :directives, [GraphQL::Schema::LateBoundType.new("__Directive")], "A list of all directives supported by this server.", null: false
|
|
16
16
|
|
|
17
17
|
def types
|
|
@@ -12,20 +12,20 @@ module GraphQL
|
|
|
12
12
|
"possible at runtime. List and NonNull types compose other types."
|
|
13
13
|
|
|
14
14
|
field :kind, GraphQL::Schema::LateBoundType.new("__TypeKind"), null: false
|
|
15
|
-
field :name, String
|
|
16
|
-
field :description, String
|
|
17
|
-
field :fields, [GraphQL::Schema::LateBoundType.new("__Field")]
|
|
15
|
+
field :name, String
|
|
16
|
+
field :description, String
|
|
17
|
+
field :fields, [GraphQL::Schema::LateBoundType.new("__Field")] do
|
|
18
18
|
argument :include_deprecated, Boolean, required: false, default_value: false
|
|
19
19
|
end
|
|
20
|
-
field :interfaces, [GraphQL::Schema::LateBoundType.new("__Type")]
|
|
21
|
-
field :possible_types, [GraphQL::Schema::LateBoundType.new("__Type")]
|
|
22
|
-
field :enum_values, [GraphQL::Schema::LateBoundType.new("__EnumValue")]
|
|
20
|
+
field :interfaces, [GraphQL::Schema::LateBoundType.new("__Type")]
|
|
21
|
+
field :possible_types, [GraphQL::Schema::LateBoundType.new("__Type")]
|
|
22
|
+
field :enum_values, [GraphQL::Schema::LateBoundType.new("__EnumValue")] do
|
|
23
23
|
argument :include_deprecated, Boolean, required: false, default_value: false
|
|
24
24
|
end
|
|
25
|
-
field :input_fields, [GraphQL::Schema::LateBoundType.new("__InputValue")]
|
|
25
|
+
field :input_fields, [GraphQL::Schema::LateBoundType.new("__InputValue")] do
|
|
26
26
|
argument :include_deprecated, Boolean, required: false, default_value: false
|
|
27
27
|
end
|
|
28
|
-
field :of_type, GraphQL::Schema::LateBoundType.new("__Type")
|
|
28
|
+
field :of_type, GraphQL::Schema::LateBoundType.new("__Type")
|
|
29
29
|
|
|
30
30
|
def name
|
|
31
31
|
object.graphql_name
|
|
@@ -50,8 +50,8 @@ module GraphQL
|
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
def interfaces
|
|
53
|
-
if @object.kind
|
|
54
|
-
@context.warden.interfaces(@object)
|
|
53
|
+
if @object.kind.object? || @object.kind.interface?
|
|
54
|
+
@context.warden.interfaces(@object).sort_by(&:graphql_name)
|
|
55
55
|
else
|
|
56
56
|
nil
|
|
57
57
|
end
|
|
@@ -2,16 +2,12 @@
|
|
|
2
2
|
module GraphQL
|
|
3
3
|
module Language
|
|
4
4
|
module BlockString
|
|
5
|
-
if !String.method_defined?(:match?)
|
|
6
|
-
using GraphQL::StringMatchBackport
|
|
7
|
-
end
|
|
8
|
-
|
|
9
5
|
# Remove leading and trailing whitespace from a block string.
|
|
10
6
|
# See "Block Strings" in https://github.com/facebook/graphql/blob/master/spec/Section%202%20--%20Language.md
|
|
11
7
|
def self.trim_whitespace(str)
|
|
12
8
|
# Early return for the most common cases:
|
|
13
9
|
if str == ""
|
|
14
|
-
return ""
|
|
10
|
+
return "".dup
|
|
15
11
|
elsif !(has_newline = str.include?("\n")) && !(str.start_with?(" "))
|
|
16
12
|
return str
|
|
17
13
|
end
|
|
@@ -59,7 +55,7 @@ module GraphQL
|
|
|
59
55
|
end
|
|
60
56
|
|
|
61
57
|
# Rebuild the string
|
|
62
|
-
lines.size > 1 ? lines.join("\n") : (lines.first || "")
|
|
58
|
+
lines.size > 1 ? lines.join("\n") : (lines.first || "".dup)
|
|
63
59
|
end
|
|
64
60
|
|
|
65
61
|
def self.print(str, indent: '')
|
|
@@ -34,6 +34,7 @@ module GraphQL
|
|
|
34
34
|
schema: @schema,
|
|
35
35
|
context: schema_context,
|
|
36
36
|
)
|
|
37
|
+
schema_context.warden = @warden
|
|
37
38
|
end
|
|
38
39
|
|
|
39
40
|
def document
|
|
@@ -87,6 +88,7 @@ module GraphQL
|
|
|
87
88
|
def build_interface_type_node(interface_type)
|
|
88
89
|
GraphQL::Language::Nodes::InterfaceTypeDefinition.new(
|
|
89
90
|
name: interface_type.graphql_name,
|
|
91
|
+
interfaces: warden.interfaces(interface_type).sort_by(&:graphql_name).map { |type| build_type_name_node(type) },
|
|
90
92
|
description: interface_type.description,
|
|
91
93
|
fields: build_field_nodes(warden.fields(interface_type)),
|
|
92
94
|
directives: directives(interface_type),
|
|
@@ -194,7 +196,7 @@ module GraphQL
|
|
|
194
196
|
when "INPUT_OBJECT"
|
|
195
197
|
GraphQL::Language::Nodes::InputObject.new(
|
|
196
198
|
arguments: default_value.to_h.map do |arg_name, arg_value|
|
|
197
|
-
arg_type =
|
|
199
|
+
arg_type = @warden.arguments(type).find { |a| a.graphql_name == arg_name.to_s }.type
|
|
198
200
|
GraphQL::Language::Nodes::Argument.new(
|
|
199
201
|
name: arg_name.to_s,
|
|
200
202
|
value: build_default_value(arg_value, arg_type)
|
|
@@ -295,7 +297,7 @@ module GraphQL
|
|
|
295
297
|
else
|
|
296
298
|
member.directives.map do |dir|
|
|
297
299
|
args = []
|
|
298
|
-
dir.arguments.argument_values.each_value do |arg_value|
|
|
300
|
+
dir.arguments.argument_values.each_value do |arg_value| # rubocop:disable Development/ContextIsPassedCop -- directive instance method
|
|
299
301
|
arg_defn = arg_value.definition
|
|
300
302
|
if arg_defn.default_value? && arg_value.value == arg_defn.default_value
|
|
301
303
|
next
|
|
@@ -197,7 +197,16 @@ module GraphQL
|
|
|
197
197
|
else
|
|
198
198
|
module_eval <<-RUBY, __FILE__, __LINE__
|
|
199
199
|
def children
|
|
200
|
-
@children ||=
|
|
200
|
+
@children ||= begin
|
|
201
|
+
if #{children_of_type.keys.map { |k| "@#{k}.any?" }.join(" || ")}
|
|
202
|
+
new_children = []
|
|
203
|
+
#{children_of_type.keys.map { |k| "new_children.concat(@#{k})" }.join("; ")}
|
|
204
|
+
new_children.freeze
|
|
205
|
+
new_children
|
|
206
|
+
else
|
|
207
|
+
NO_CHILDREN
|
|
208
|
+
end
|
|
209
|
+
end
|
|
201
210
|
end
|
|
202
211
|
RUBY
|
|
203
212
|
end
|
|
@@ -467,7 +476,6 @@ module GraphQL
|
|
|
467
476
|
end
|
|
468
477
|
end
|
|
469
478
|
|
|
470
|
-
|
|
471
479
|
# A list type definition, denoted with `[...]` (used for variable type definitions)
|
|
472
480
|
class ListType < WrapperType
|
|
473
481
|
end
|
|
@@ -618,6 +626,7 @@ module GraphQL
|
|
|
618
626
|
attr_reader :description
|
|
619
627
|
scalar_methods :name
|
|
620
628
|
children_methods({
|
|
629
|
+
interfaces: GraphQL::Language::Nodes::TypeName,
|
|
621
630
|
directives: GraphQL::Language::Nodes::Directive,
|
|
622
631
|
fields: GraphQL::Language::Nodes::FieldDefinition,
|
|
623
632
|
})
|
|
@@ -627,6 +636,7 @@ module GraphQL
|
|
|
627
636
|
class InterfaceTypeExtension < AbstractNode
|
|
628
637
|
scalar_methods :name
|
|
629
638
|
children_methods({
|
|
639
|
+
interfaces: GraphQL::Language::Nodes::TypeName,
|
|
630
640
|
directives: GraphQL::Language::Nodes::Directive,
|
|
631
641
|
fields: GraphQL::Language::Nodes::FieldDefinition,
|
|
632
642
|
})
|