graphql 2.0.32 → 2.5.22
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/detailed_trace_generator.rb +77 -0
- data/lib/generators/graphql/install/mutation_root_generator.rb +2 -2
- data/lib/generators/graphql/install/templates/base_mutation.erb +2 -0
- data/lib/generators/graphql/install/templates/mutation_type.erb +2 -0
- data/lib/generators/graphql/install_generator.rb +49 -0
- data/lib/generators/graphql/orm_mutations_base.rb +1 -1
- data/lib/generators/graphql/templates/base_argument.erb +2 -0
- data/lib/generators/graphql/templates/base_connection.erb +2 -0
- data/lib/generators/graphql/templates/base_edge.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_object.erb +2 -0
- data/lib/generators/graphql/templates/base_resolver.erb +8 -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/create_graphql_detailed_traces.erb +10 -0
- data/lib/generators/graphql/templates/graphql_controller.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/node_type.erb +2 -0
- data/lib/generators/graphql/templates/query_type.erb +2 -0
- data/lib/generators/graphql/templates/schema.erb +5 -0
- data/lib/generators/graphql/type_generator.rb +1 -1
- data/lib/graphql/analysis/analyzer.rb +90 -0
- data/lib/graphql/analysis/field_usage.rb +82 -0
- data/lib/graphql/analysis/max_query_complexity.rb +20 -0
- data/lib/graphql/analysis/max_query_depth.rb +20 -0
- data/lib/graphql/analysis/query_complexity.rb +263 -0
- data/lib/graphql/analysis/query_depth.rb +58 -0
- data/lib/graphql/analysis/visitor.rb +280 -0
- data/lib/graphql/analysis.rb +95 -1
- data/lib/graphql/autoload.rb +38 -0
- data/lib/graphql/backtrace/table.rb +118 -55
- data/lib/graphql/backtrace.rb +1 -19
- data/lib/graphql/coercion_error.rb +1 -9
- data/lib/graphql/current.rb +57 -0
- data/lib/graphql/dashboard/application_controller.rb +41 -0
- data/lib/graphql/dashboard/detailed_traces.rb +47 -0
- data/lib/graphql/dashboard/installable.rb +22 -0
- data/lib/graphql/dashboard/landings_controller.rb +9 -0
- data/lib/graphql/dashboard/limiters.rb +93 -0
- data/lib/graphql/dashboard/operation_store.rb +199 -0
- data/lib/graphql/dashboard/statics/bootstrap-5.3.3.min.css +6 -0
- data/lib/graphql/dashboard/statics/bootstrap-5.3.3.min.js +7 -0
- data/lib/graphql/dashboard/statics/charts.min.css +1 -0
- data/lib/graphql/dashboard/statics/dashboard.css +30 -0
- data/lib/graphql/dashboard/statics/dashboard.js +143 -0
- data/lib/graphql/dashboard/statics/header-icon.png +0 -0
- data/lib/graphql/dashboard/statics/icon.png +0 -0
- data/lib/graphql/dashboard/statics_controller.rb +31 -0
- data/lib/graphql/dashboard/subscriptions.rb +97 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/detailed_traces/traces/index.html.erb +45 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/landings/show.html.erb +18 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/limiters/limiters/show.html.erb +62 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/not_installed.html.erb +18 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/clients/_form.html.erb +24 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/clients/edit.html.erb +21 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/clients/index.html.erb +69 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/clients/new.html.erb +7 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/index_entries/index.html.erb +39 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/index_entries/show.html.erb +32 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/operations/index.html.erb +81 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/operations/show.html.erb +71 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/subscriptions/subscriptions/show.html.erb +41 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/subscriptions/topics/index.html.erb +55 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/subscriptions/topics/show.html.erb +40 -0
- data/lib/graphql/dashboard/views/layouts/graphql/dashboard/application.html.erb +108 -0
- data/lib/graphql/dashboard.rb +96 -0
- data/lib/graphql/dataloader/active_record_association_source.rb +84 -0
- data/lib/graphql/dataloader/active_record_source.rb +47 -0
- data/lib/graphql/dataloader/async_dataloader.rb +112 -0
- data/lib/graphql/dataloader/null_dataloader.rb +55 -10
- data/lib/graphql/dataloader/request.rb +5 -0
- data/lib/graphql/dataloader/source.rb +35 -12
- data/lib/graphql/dataloader.rb +224 -149
- data/lib/graphql/date_encoding_error.rb +1 -1
- data/lib/graphql/dig.rb +2 -1
- data/lib/graphql/duration_encoding_error.rb +16 -0
- data/lib/graphql/execution/interpreter/argument_value.rb +5 -1
- data/lib/graphql/execution/interpreter/arguments_cache.rb +5 -10
- data/lib/graphql/execution/interpreter/resolve.rb +23 -25
- data/lib/graphql/execution/interpreter/runtime/graphql_result.rb +228 -0
- data/lib/graphql/execution/interpreter/runtime.rb +363 -434
- data/lib/graphql/execution/interpreter.rb +91 -164
- data/lib/graphql/execution/lookahead.rb +105 -31
- data/lib/graphql/execution/multiplex.rb +7 -6
- data/lib/graphql/execution/next/field_resolve_step.rb +711 -0
- data/lib/graphql/execution/next/load_argument_step.rb +60 -0
- data/lib/graphql/execution/next/prepare_object_step.rb +129 -0
- data/lib/graphql/execution/next/runner.rb +389 -0
- data/lib/graphql/execution/next/selections_step.rb +37 -0
- data/lib/graphql/execution/next.rb +70 -0
- data/lib/graphql/execution.rb +1 -0
- data/lib/graphql/execution_error.rb +13 -10
- data/lib/graphql/introspection/directive_location_enum.rb +1 -1
- data/lib/graphql/introspection/directive_type.rb +7 -3
- data/lib/graphql/introspection/dynamic_fields.rb +5 -1
- data/lib/graphql/introspection/entry_points.rb +20 -6
- data/lib/graphql/introspection/enum_value_type.rb +5 -5
- data/lib/graphql/introspection/field_type.rb +13 -5
- data/lib/graphql/introspection/input_value_type.rb +21 -13
- data/lib/graphql/introspection/schema_type.rb +8 -11
- data/lib/graphql/introspection/type_type.rb +64 -28
- data/lib/graphql/invalid_name_error.rb +1 -1
- data/lib/graphql/invalid_null_error.rb +26 -17
- data/lib/graphql/language/block_string.rb +34 -18
- data/lib/graphql/language/cache.rb +13 -0
- data/lib/graphql/language/comment.rb +18 -0
- data/lib/graphql/language/definition_slice.rb +1 -1
- data/lib/graphql/language/document_from_schema_definition.rb +90 -61
- data/lib/graphql/language/lexer.rb +319 -193
- data/lib/graphql/language/nodes.rb +136 -77
- data/lib/graphql/language/parser.rb +807 -1985
- data/lib/graphql/language/printer.rb +324 -151
- data/lib/graphql/language/sanitized_printer.rb +21 -23
- data/lib/graphql/language/static_visitor.rb +171 -0
- data/lib/graphql/language/visitor.rb +23 -83
- data/lib/graphql/language.rb +71 -1
- data/lib/graphql/load_application_object_failed_error.rb +5 -1
- data/lib/graphql/pagination/array_connection.rb +6 -6
- data/lib/graphql/pagination/connection.rb +30 -1
- data/lib/graphql/pagination/connections.rb +32 -0
- data/lib/graphql/pagination/mongoid_relation_connection.rb +1 -2
- data/lib/graphql/query/context/scoped_context.rb +101 -0
- data/lib/graphql/query/context.rb +82 -144
- data/lib/graphql/query/null_context.rb +15 -18
- data/lib/graphql/query/partial.rb +179 -0
- data/lib/graphql/query/validation_pipeline.rb +4 -4
- data/lib/graphql/query/variable_validation_error.rb +1 -1
- data/lib/graphql/query/variables.rb +3 -3
- data/lib/graphql/query.rb +126 -81
- data/lib/graphql/railtie.rb +16 -6
- data/lib/graphql/rake_task.rb +3 -12
- data/lib/graphql/rubocop/graphql/base_cop.rb +1 -1
- data/lib/graphql/rubocop/graphql/field_type_in_block.rb +144 -0
- data/lib/graphql/rubocop/graphql/root_types_in_block.rb +38 -0
- data/lib/graphql/rubocop.rb +2 -0
- data/lib/graphql/schema/addition.rb +26 -13
- data/lib/graphql/schema/always_visible.rb +7 -2
- data/lib/graphql/schema/argument.rb +75 -9
- data/lib/graphql/schema/base_64_encoder.rb +3 -5
- data/lib/graphql/schema/build_from_definition.rb +123 -60
- data/lib/graphql/schema/directive/flagged.rb +4 -2
- data/lib/graphql/schema/directive/one_of.rb +12 -0
- data/lib/graphql/schema/directive/specified_by.rb +14 -0
- data/lib/graphql/schema/directive.rb +54 -2
- data/lib/graphql/schema/enum.rb +110 -27
- data/lib/graphql/schema/enum_value.rb +10 -2
- data/lib/graphql/schema/field/connection_extension.rb +15 -49
- data/lib/graphql/schema/field/scope_extension.rb +23 -7
- data/lib/graphql/schema/field.rb +245 -118
- data/lib/graphql/schema/field_extension.rb +34 -1
- data/lib/graphql/schema/has_single_input_argument.rb +160 -0
- data/lib/graphql/schema/input_object.rb +116 -60
- data/lib/graphql/schema/interface.rb +34 -16
- data/lib/graphql/schema/introspection_system.rb +8 -17
- data/lib/graphql/schema/late_bound_type.rb +4 -0
- data/lib/graphql/schema/list.rb +3 -3
- data/lib/graphql/schema/loader.rb +3 -4
- data/lib/graphql/schema/member/base_dsl_methods.rb +18 -2
- data/lib/graphql/schema/member/has_arguments.rb +132 -100
- data/lib/graphql/schema/member/has_authorization.rb +35 -0
- data/lib/graphql/schema/member/has_dataloader.rb +99 -0
- data/lib/graphql/schema/member/has_deprecation_reason.rb +15 -0
- data/lib/graphql/schema/member/has_directives.rb +4 -4
- data/lib/graphql/schema/member/has_fields.rb +115 -15
- data/lib/graphql/schema/member/has_interfaces.rb +26 -12
- data/lib/graphql/schema/member/has_unresolved_type_error.rb +5 -1
- data/lib/graphql/schema/member/has_validators.rb +1 -1
- data/lib/graphql/schema/member/relay_shortcuts.rb +1 -1
- data/lib/graphql/schema/member/scoped.rb +19 -0
- data/lib/graphql/schema/member/type_system_helpers.rb +17 -4
- data/lib/graphql/schema/member/validates_input.rb +3 -3
- data/lib/graphql/schema/member.rb +6 -0
- data/lib/graphql/schema/mutation.rb +7 -0
- data/lib/graphql/schema/object.rb +34 -8
- data/lib/graphql/schema/printer.rb +9 -7
- data/lib/graphql/schema/ractor_shareable.rb +79 -0
- data/lib/graphql/schema/relay_classic_mutation.rb +6 -129
- data/lib/graphql/schema/resolver.rb +90 -32
- data/lib/graphql/schema/scalar.rb +4 -9
- data/lib/graphql/schema/subscription.rb +63 -10
- data/lib/graphql/schema/timeout.rb +19 -2
- data/lib/graphql/schema/type_expression.rb +2 -2
- data/lib/graphql/schema/union.rb +2 -2
- data/lib/graphql/schema/unique_within_type.rb +1 -1
- data/lib/graphql/schema/validator/all_validator.rb +62 -0
- data/lib/graphql/schema/validator/required_validator.rb +92 -11
- data/lib/graphql/schema/validator.rb +3 -1
- data/lib/graphql/schema/visibility/migration.rb +188 -0
- data/lib/graphql/schema/visibility/profile.rb +445 -0
- data/lib/graphql/schema/visibility/visit.rb +190 -0
- data/lib/graphql/schema/visibility.rb +311 -0
- data/lib/graphql/schema/warden.rb +275 -103
- data/lib/graphql/schema.rb +950 -210
- data/lib/graphql/static_validation/all_rules.rb +3 -3
- data/lib/graphql/static_validation/base_visitor.rb +7 -6
- data/lib/graphql/static_validation/literal_validator.rb +6 -7
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +1 -1
- data/lib/graphql/static_validation/rules/argument_names_are_unique.rb +1 -1
- data/lib/graphql/static_validation/rules/arguments_are_defined.rb +3 -2
- data/lib/graphql/static_validation/rules/directives_are_defined.rb +3 -3
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +2 -0
- data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +12 -2
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +47 -13
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +88 -25
- data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +10 -2
- data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -3
- data/lib/graphql/static_validation/rules/fragment_types_exist.rb +12 -2
- data/lib/graphql/static_validation/rules/fragments_are_on_composite_types.rb +1 -1
- data/lib/graphql/static_validation/rules/mutation_root_exists.rb +1 -1
- data/lib/graphql/static_validation/rules/no_definitions_are_present.rb +1 -1
- data/lib/graphql/static_validation/rules/not_single_subscription_error.rb +25 -0
- data/lib/graphql/static_validation/rules/query_root_exists.rb +1 -1
- data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +5 -5
- data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +5 -5
- data/lib/graphql/static_validation/rules/subscription_root_exists_and_single_subscription_selection.rb +26 -0
- data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +7 -3
- data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +18 -27
- data/lib/graphql/static_validation/rules/variable_names_are_unique.rb +1 -1
- data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +2 -2
- data/lib/graphql/static_validation/rules/variables_are_input_types.rb +11 -2
- data/lib/graphql/static_validation/validation_context.rb +21 -5
- data/lib/graphql/static_validation/validator.rb +9 -1
- data/lib/graphql/static_validation.rb +0 -1
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +8 -5
- data/lib/graphql/subscriptions/broadcast_analyzer.rb +11 -5
- data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +12 -10
- data/lib/graphql/subscriptions/event.rb +21 -4
- data/lib/graphql/subscriptions/serialize.rb +3 -1
- data/lib/graphql/subscriptions.rb +21 -17
- data/lib/graphql/testing/helpers.rb +161 -0
- data/lib/graphql/testing/mock_action_cable.rb +111 -0
- data/lib/graphql/testing.rb +3 -0
- data/lib/graphql/tracing/active_support_notifications_trace.rb +14 -3
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +1 -1
- data/lib/graphql/tracing/appoptics_trace.rb +7 -3
- data/lib/graphql/tracing/appoptics_tracing.rb +9 -2
- data/lib/graphql/tracing/appsignal_trace.rb +32 -59
- data/lib/graphql/tracing/appsignal_tracing.rb +2 -0
- data/lib/graphql/tracing/call_legacy_tracers.rb +66 -0
- data/lib/graphql/tracing/data_dog_trace.rb +46 -162
- data/lib/graphql/tracing/data_dog_tracing.rb +2 -0
- data/lib/graphql/tracing/detailed_trace/active_record_backend.rb +74 -0
- data/lib/graphql/tracing/detailed_trace/memory_backend.rb +60 -0
- data/lib/graphql/tracing/detailed_trace/redis_backend.rb +72 -0
- data/lib/graphql/tracing/detailed_trace.rb +156 -0
- data/lib/graphql/tracing/legacy_hooks_trace.rb +75 -0
- data/lib/graphql/tracing/legacy_trace.rb +4 -61
- data/lib/graphql/tracing/monitor_trace.rb +283 -0
- data/lib/graphql/tracing/new_relic_trace.rb +47 -54
- data/lib/graphql/tracing/new_relic_tracing.rb +2 -0
- data/lib/graphql/tracing/notifications_trace.rb +183 -37
- data/lib/graphql/tracing/notifications_tracing.rb +2 -0
- data/lib/graphql/tracing/null_trace.rb +9 -0
- data/lib/graphql/tracing/perfetto_trace/trace.proto +141 -0
- data/lib/graphql/tracing/perfetto_trace/trace_pb.rb +33 -0
- data/lib/graphql/tracing/perfetto_trace.rb +864 -0
- data/lib/graphql/tracing/platform_tracing.rb +3 -1
- data/lib/graphql/tracing/{prometheus_tracing → prometheus_trace}/graphql_collector.rb +5 -1
- data/lib/graphql/tracing/prometheus_trace.rb +73 -73
- data/lib/graphql/tracing/prometheus_tracing.rb +2 -0
- data/lib/graphql/tracing/scout_trace.rb +32 -58
- data/lib/graphql/tracing/scout_tracing.rb +2 -0
- data/lib/graphql/tracing/sentry_trace.rb +82 -0
- data/lib/graphql/tracing/statsd_trace.rb +33 -45
- data/lib/graphql/tracing/statsd_tracing.rb +2 -0
- data/lib/graphql/tracing/trace.rb +112 -1
- data/lib/graphql/tracing.rb +31 -28
- data/lib/graphql/type_kinds.rb +2 -1
- data/lib/graphql/types/iso_8601_duration.rb +77 -0
- data/lib/graphql/types/relay/connection_behaviors.rb +44 -2
- data/lib/graphql/types/relay/edge_behaviors.rb +18 -0
- data/lib/graphql/types/relay/has_node_field.rb +13 -8
- data/lib/graphql/types/relay/has_nodes_field.rb +13 -8
- data/lib/graphql/types/relay/node_behaviors.rb +13 -2
- data/lib/graphql/types/relay/page_info_behaviors.rb +4 -0
- data/lib/graphql/types.rb +18 -10
- data/lib/graphql/unauthorized_enum_value_error.rb +13 -0
- data/lib/graphql/unauthorized_error.rb +5 -1
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +71 -54
- data/readme.md +12 -2
- metadata +233 -37
- data/lib/graphql/analysis/ast/analyzer.rb +0 -84
- data/lib/graphql/analysis/ast/field_usage.rb +0 -57
- data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -22
- data/lib/graphql/analysis/ast/max_query_depth.rb +0 -22
- data/lib/graphql/analysis/ast/query_complexity.rb +0 -230
- data/lib/graphql/analysis/ast/query_depth.rb +0 -55
- data/lib/graphql/analysis/ast/visitor.rb +0 -276
- data/lib/graphql/analysis/ast.rb +0 -81
- data/lib/graphql/backtrace/inspect_result.rb +0 -50
- data/lib/graphql/backtrace/trace.rb +0 -96
- data/lib/graphql/backtrace/tracer.rb +0 -80
- data/lib/graphql/deprecation.rb +0 -9
- data/lib/graphql/filter.rb +0 -59
- data/lib/graphql/language/parser.y +0 -560
- data/lib/graphql/language/token.rb +0 -34
- data/lib/graphql/schema/base_64_bp.rb +0 -26
- data/lib/graphql/schema/invalid_type_error.rb +0 -7
- data/lib/graphql/schema/null_mask.rb +0 -11
- data/lib/graphql/static_validation/rules/subscription_root_exists.rb +0 -17
- data/lib/graphql/static_validation/type_stack.rb +0 -216
- data/lib/graphql/subscriptions/instrumentation.rb +0 -28
|
@@ -16,30 +16,33 @@ module GraphQL
|
|
|
16
16
|
# @return [Integer] The first line of the definition (not the description)
|
|
17
17
|
attr_reader :definition_line
|
|
18
18
|
|
|
19
|
-
def initialize(
|
|
20
|
-
@definition_line =
|
|
21
|
-
super(
|
|
19
|
+
def initialize(definition_line: nil, **_rest)
|
|
20
|
+
@definition_line = definition_line
|
|
21
|
+
super(**_rest)
|
|
22
22
|
end
|
|
23
|
-
end
|
|
24
23
|
|
|
25
|
-
|
|
24
|
+
def marshal_dump
|
|
25
|
+
super << @definition_line
|
|
26
|
+
end
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
def initialize(options = {})
|
|
31
|
-
if options.key?(:position_source)
|
|
32
|
-
position_source = options.delete(:position_source)
|
|
33
|
-
@line = position_source[1]
|
|
34
|
-
@col = position_source[2]
|
|
35
|
-
else
|
|
36
|
-
@line = options.delete(:line)
|
|
37
|
-
@col = options.delete(:col)
|
|
28
|
+
def marshal_load(values)
|
|
29
|
+
@definition_line = values.pop
|
|
30
|
+
super
|
|
38
31
|
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
attr_reader :filename
|
|
39
35
|
|
|
40
|
-
|
|
36
|
+
def line
|
|
37
|
+
@line ||= @source&.line_at(@pos)
|
|
38
|
+
end
|
|
41
39
|
|
|
42
|
-
|
|
40
|
+
def col
|
|
41
|
+
@col ||= @source&.column_at(@pos)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def definition_line
|
|
45
|
+
@definition_line ||= (@source && @definition_pos) ? @source.line_at(@definition_pos) : nil
|
|
43
46
|
end
|
|
44
47
|
|
|
45
48
|
# Value equality
|
|
@@ -80,7 +83,11 @@ module GraphQL
|
|
|
80
83
|
|
|
81
84
|
def to_query_string(printer: GraphQL::Language::Printer.new)
|
|
82
85
|
if printer.is_a?(GraphQL::Language::Printer)
|
|
83
|
-
|
|
86
|
+
if frozen?
|
|
87
|
+
@query_string || printer.print(self)
|
|
88
|
+
else
|
|
89
|
+
@query_string ||= printer.print(self)
|
|
90
|
+
end
|
|
84
91
|
else
|
|
85
92
|
printer.print(self)
|
|
86
93
|
end
|
|
@@ -198,8 +205,8 @@ module GraphQL
|
|
|
198
205
|
module_eval <<-RUBY, __FILE__, __LINE__
|
|
199
206
|
# Singular method: create a node with these options
|
|
200
207
|
# and return a new `self` which includes that node in this list.
|
|
201
|
-
def merge_#{method_name.to_s.sub(/s$/, "")}(node_opts)
|
|
202
|
-
merge(#{method_name}: #{method_name} + [#{node_type.name}.new(node_opts)])
|
|
208
|
+
def merge_#{method_name.to_s.sub(/s$/, "")}(**node_opts)
|
|
209
|
+
merge(#{method_name}: #{method_name} + [#{node_type.name}.new(**node_opts)])
|
|
203
210
|
end
|
|
204
211
|
RUBY
|
|
205
212
|
end
|
|
@@ -228,13 +235,14 @@ module GraphQL
|
|
|
228
235
|
end
|
|
229
236
|
|
|
230
237
|
if defined?(@scalar_methods)
|
|
231
|
-
if
|
|
232
|
-
|
|
238
|
+
if !@initialize_was_generated
|
|
239
|
+
@initialize_was_generated = true
|
|
240
|
+
generate_initialize
|
|
233
241
|
else
|
|
234
242
|
# This method was defined manually
|
|
235
243
|
end
|
|
236
244
|
else
|
|
237
|
-
raise "Can't
|
|
245
|
+
raise "Can't generate_initialize because scalar_methods wasn't called; call it before children_methods"
|
|
238
246
|
end
|
|
239
247
|
end
|
|
240
248
|
|
|
@@ -263,38 +271,81 @@ module GraphQL
|
|
|
263
271
|
end
|
|
264
272
|
end
|
|
265
273
|
|
|
266
|
-
|
|
274
|
+
DEFAULT_INITIALIZE_OPTIONS = [
|
|
275
|
+
"line: nil",
|
|
276
|
+
"col: nil",
|
|
277
|
+
"pos: nil",
|
|
278
|
+
"filename: nil",
|
|
279
|
+
"source: nil"
|
|
280
|
+
]
|
|
281
|
+
|
|
282
|
+
IGNORED_MARSHALLING_KEYWORDS = [:comment]
|
|
283
|
+
|
|
284
|
+
def generate_initialize
|
|
285
|
+
return if method_defined?(:marshal_load, false) # checking for `:initialize` doesn't work right
|
|
286
|
+
|
|
267
287
|
scalar_method_names = @scalar_methods
|
|
268
288
|
# TODO: These probably should be scalar methods, but `types` returns an array
|
|
269
|
-
[:types, :description].each do |extra_method|
|
|
289
|
+
[:types, :description, :comment].each do |extra_method|
|
|
270
290
|
if method_defined?(extra_method)
|
|
271
291
|
scalar_method_names += [extra_method]
|
|
272
292
|
end
|
|
273
293
|
end
|
|
274
294
|
|
|
275
|
-
|
|
295
|
+
children_method_names = @children_methods.keys
|
|
296
|
+
|
|
297
|
+
all_method_names = scalar_method_names + children_method_names
|
|
276
298
|
if all_method_names.include?(:alias)
|
|
277
299
|
# Rather than complicating this special case,
|
|
278
300
|
# let it be overridden (in field)
|
|
279
301
|
return
|
|
280
302
|
else
|
|
281
303
|
arguments = scalar_method_names.map { |m| "#{m}: nil"} +
|
|
282
|
-
|
|
304
|
+
children_method_names.map { |m| "#{m}: NO_CHILDREN" } +
|
|
305
|
+
DEFAULT_INITIALIZE_OPTIONS
|
|
283
306
|
|
|
284
307
|
assignments = scalar_method_names.map { |m| "@#{m} = #{m}"} +
|
|
285
|
-
|
|
308
|
+
children_method_names.map { |m| "@#{m} = #{m}.freeze" }
|
|
309
|
+
|
|
310
|
+
if name.end_with?("Definition") && name != "FragmentDefinition"
|
|
311
|
+
arguments << "definition_pos: nil"
|
|
312
|
+
assignments << "@definition_pos = definition_pos"
|
|
313
|
+
end
|
|
286
314
|
|
|
287
315
|
keywords = scalar_method_names.map { |m| "#{m}: #{m}"} +
|
|
288
|
-
|
|
316
|
+
children_method_names.map { |m| "#{m}: #{m}" }
|
|
317
|
+
|
|
318
|
+
ignored_keywords = IGNORED_MARSHALLING_KEYWORDS.map do |keyword|
|
|
319
|
+
"#{keyword.to_s}: nil"
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
marshalling_method_names = all_method_names - IGNORED_MARSHALLING_KEYWORDS
|
|
289
323
|
|
|
290
324
|
module_eval <<-RUBY, __FILE__, __LINE__
|
|
291
|
-
def
|
|
325
|
+
def initialize(#{arguments.join(", ")})
|
|
326
|
+
@line = line
|
|
327
|
+
@col = col
|
|
328
|
+
@pos = pos
|
|
329
|
+
@filename = filename
|
|
330
|
+
@source = source
|
|
292
331
|
#{assignments.join("\n")}
|
|
293
332
|
end
|
|
294
333
|
|
|
295
|
-
def self.from_a(filename, line, col, #{(
|
|
334
|
+
def self.from_a(filename, line, col, #{marshalling_method_names.join(", ")}, #{ignored_keywords.join(", ")})
|
|
296
335
|
self.new(filename: filename, line: line, col: col, #{keywords.join(", ")})
|
|
297
336
|
end
|
|
337
|
+
|
|
338
|
+
def marshal_dump
|
|
339
|
+
[
|
|
340
|
+
line, col, # use methods here to force them to be calculated
|
|
341
|
+
@filename,
|
|
342
|
+
#{marshalling_method_names.map { |n| "@#{n}," }.join}
|
|
343
|
+
]
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
def marshal_load(values)
|
|
347
|
+
@line, @col, @filename #{marshalling_method_names.map { |n| ", @#{n}"}.join} = values
|
|
348
|
+
end
|
|
298
349
|
RUBY
|
|
299
350
|
end
|
|
300
351
|
end
|
|
@@ -326,7 +377,7 @@ module GraphQL
|
|
|
326
377
|
# @return [String, Float, Integer, Boolean, Array, InputObject, VariableIdentifier] The value passed for this key
|
|
327
378
|
|
|
328
379
|
def children
|
|
329
|
-
@children ||= Array(value).flatten.select { |v| v.is_a?(AbstractNode) }
|
|
380
|
+
@children ||= Array(value).flatten.tap { _1.select! { |v| v.is_a?(AbstractNode) } }
|
|
330
381
|
end
|
|
331
382
|
end
|
|
332
383
|
|
|
@@ -339,13 +390,13 @@ module GraphQL
|
|
|
339
390
|
end
|
|
340
391
|
|
|
341
392
|
class DirectiveDefinition < AbstractNode
|
|
342
|
-
include DefinitionNode
|
|
343
393
|
attr_reader :description
|
|
344
394
|
scalar_methods :name, :repeatable
|
|
345
395
|
children_methods(
|
|
346
396
|
arguments: Nodes::Argument,
|
|
347
397
|
locations: Nodes::DirectiveLocation,
|
|
348
398
|
)
|
|
399
|
+
self.children_method_name = :definitions
|
|
349
400
|
end
|
|
350
401
|
|
|
351
402
|
# An enum value. The string is available as {#name}.
|
|
@@ -358,6 +409,32 @@ module GraphQL
|
|
|
358
409
|
|
|
359
410
|
# A single selection in a GraphQL query.
|
|
360
411
|
class Field < AbstractNode
|
|
412
|
+
def initialize(name: nil, arguments: NONE, directives: NONE, selections: NONE, field_alias: nil, line: nil, col: nil, pos: nil, filename: nil, source: nil)
|
|
413
|
+
@name = name
|
|
414
|
+
@arguments = arguments || NONE
|
|
415
|
+
@directives = directives || NONE
|
|
416
|
+
@selections = selections || NONE
|
|
417
|
+
# oops, alias is a keyword:
|
|
418
|
+
@alias = field_alias
|
|
419
|
+
@line = line
|
|
420
|
+
@col = col
|
|
421
|
+
@pos = pos
|
|
422
|
+
@filename = filename
|
|
423
|
+
@source = source
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
def self.from_a(filename, line, col, field_alias, name, arguments, directives, selections) # rubocop:disable Metrics/ParameterLists
|
|
427
|
+
self.new(filename: filename, line: line, col: col, field_alias: field_alias, name: name, arguments: arguments, directives: directives, selections: selections)
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
def marshal_dump
|
|
431
|
+
[line, col, @filename, @name, @arguments, @directives, @selections, @alias]
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
def marshal_load(values)
|
|
435
|
+
@line, @col, @filename, @name, @arguments, @directives, @selections, @alias = values
|
|
436
|
+
end
|
|
437
|
+
|
|
361
438
|
scalar_methods :name, :alias
|
|
362
439
|
children_methods({
|
|
363
440
|
arguments: GraphQL::Language::Nodes::Argument,
|
|
@@ -365,44 +442,36 @@ module GraphQL
|
|
|
365
442
|
directives: GraphQL::Language::Nodes::Directive,
|
|
366
443
|
})
|
|
367
444
|
|
|
368
|
-
# @!attribute selections
|
|
369
|
-
# @return [Array<Nodes::Field>] Selections on this object (or empty array if this is a scalar field)
|
|
370
|
-
|
|
371
|
-
def initialize_node(attributes)
|
|
372
|
-
@name = attributes[:name]
|
|
373
|
-
@arguments = attributes[:arguments] || NONE
|
|
374
|
-
@directives = attributes[:directives] || NONE
|
|
375
|
-
@selections = attributes[:selections] || NONE
|
|
376
|
-
# oops, alias is a keyword:
|
|
377
|
-
@alias = attributes[:alias]
|
|
378
|
-
end
|
|
379
|
-
|
|
380
|
-
def self.from_a(filename, line, col, graphql_alias, name, arguments, directives, selections) # rubocop:disable Metrics/ParameterLists
|
|
381
|
-
self.new(filename: filename, line: line, col: col, alias: graphql_alias, name: name, arguments: arguments, directives: directives, selections: selections)
|
|
382
|
-
end
|
|
383
|
-
|
|
384
445
|
# Override this because default is `:fields`
|
|
385
446
|
self.children_method_name = :selections
|
|
386
447
|
end
|
|
387
448
|
|
|
388
449
|
# A reusable fragment, defined at document-level.
|
|
389
450
|
class FragmentDefinition < AbstractNode
|
|
390
|
-
|
|
391
|
-
# @return [String] the identifier for this fragment, which may be applied with `...#{name}`
|
|
392
|
-
|
|
393
|
-
# @!attribute type
|
|
394
|
-
# @return [String] the type condition for this fragment (name of type which it may apply to)
|
|
395
|
-
def initialize_node(name: nil, type: nil, directives: [], selections: [])
|
|
451
|
+
def initialize(name: nil, type: nil, directives: NONE, selections: NONE, filename: nil, pos: nil, source: nil, line: nil, col: nil)
|
|
396
452
|
@name = name
|
|
397
453
|
@type = type
|
|
398
454
|
@directives = directives
|
|
399
455
|
@selections = selections
|
|
456
|
+
@filename = filename
|
|
457
|
+
@pos = pos
|
|
458
|
+
@source = source
|
|
459
|
+
@line = line
|
|
460
|
+
@col = col
|
|
400
461
|
end
|
|
401
462
|
|
|
402
463
|
def self.from_a(filename, line, col, name, type, directives, selections)
|
|
403
464
|
self.new(filename: filename, line: line, col: col, name: name, type: type, directives: directives, selections: selections)
|
|
404
465
|
end
|
|
405
466
|
|
|
467
|
+
def marshal_dump
|
|
468
|
+
[line, col, @filename, @name, @type, @directives, @selections]
|
|
469
|
+
end
|
|
470
|
+
|
|
471
|
+
def marshal_load(values)
|
|
472
|
+
@line, @col, @filename, @name, @type, @directives, @selections = values
|
|
473
|
+
end
|
|
474
|
+
|
|
406
475
|
scalar_methods :name, :type
|
|
407
476
|
children_methods({
|
|
408
477
|
selections: GraphQL::Language::Nodes::Field,
|
|
@@ -487,7 +556,7 @@ module GraphQL
|
|
|
487
556
|
# An operation-level query variable
|
|
488
557
|
class VariableDefinition < AbstractNode
|
|
489
558
|
scalar_methods :name, :type, :default_value
|
|
490
|
-
children_methods
|
|
559
|
+
children_methods(directives: Directive)
|
|
491
560
|
# @!attribute default_value
|
|
492
561
|
# @return [String, Integer, Float, Boolean, Array, NullValue] A Ruby value to use if no other value is provided
|
|
493
562
|
|
|
@@ -538,7 +607,7 @@ module GraphQL
|
|
|
538
607
|
# @example Creating a custom string from a document
|
|
539
608
|
# class VariableScrubber < GraphQL::Language::Printer
|
|
540
609
|
# def print_argument(arg)
|
|
541
|
-
# "#{arg.name}: <HIDDEN>"
|
|
610
|
+
# print_string("#{arg.name}: <HIDDEN>")
|
|
542
611
|
# end
|
|
543
612
|
# end
|
|
544
613
|
#
|
|
@@ -565,7 +634,6 @@ module GraphQL
|
|
|
565
634
|
end
|
|
566
635
|
|
|
567
636
|
class SchemaDefinition < AbstractNode
|
|
568
|
-
include DefinitionNode
|
|
569
637
|
scalar_methods :query, :mutation, :subscription
|
|
570
638
|
children_methods({
|
|
571
639
|
directives: GraphQL::Language::Nodes::Directive,
|
|
@@ -582,8 +650,7 @@ module GraphQL
|
|
|
582
650
|
end
|
|
583
651
|
|
|
584
652
|
class ScalarTypeDefinition < AbstractNode
|
|
585
|
-
|
|
586
|
-
attr_reader :description
|
|
653
|
+
attr_reader :description, :comment
|
|
587
654
|
scalar_methods :name
|
|
588
655
|
children_methods({
|
|
589
656
|
directives: GraphQL::Language::Nodes::Directive,
|
|
@@ -600,8 +667,7 @@ module GraphQL
|
|
|
600
667
|
end
|
|
601
668
|
|
|
602
669
|
class InputValueDefinition < AbstractNode
|
|
603
|
-
|
|
604
|
-
attr_reader :description
|
|
670
|
+
attr_reader :description, :comment
|
|
605
671
|
scalar_methods :name, :type, :default_value
|
|
606
672
|
children_methods({
|
|
607
673
|
directives: GraphQL::Language::Nodes::Directive,
|
|
@@ -610,8 +676,7 @@ module GraphQL
|
|
|
610
676
|
end
|
|
611
677
|
|
|
612
678
|
class FieldDefinition < AbstractNode
|
|
613
|
-
|
|
614
|
-
attr_reader :description
|
|
679
|
+
attr_reader :description, :comment
|
|
615
680
|
scalar_methods :name, :type
|
|
616
681
|
children_methods({
|
|
617
682
|
arguments: GraphQL::Language::Nodes::InputValueDefinition,
|
|
@@ -631,8 +696,7 @@ module GraphQL
|
|
|
631
696
|
end
|
|
632
697
|
|
|
633
698
|
class ObjectTypeDefinition < AbstractNode
|
|
634
|
-
|
|
635
|
-
attr_reader :description
|
|
699
|
+
attr_reader :description, :comment
|
|
636
700
|
scalar_methods :name, :interfaces
|
|
637
701
|
children_methods({
|
|
638
702
|
directives: GraphQL::Language::Nodes::Directive,
|
|
@@ -651,8 +715,7 @@ module GraphQL
|
|
|
651
715
|
end
|
|
652
716
|
|
|
653
717
|
class InterfaceTypeDefinition < AbstractNode
|
|
654
|
-
|
|
655
|
-
attr_reader :description
|
|
718
|
+
attr_reader :description, :comment
|
|
656
719
|
scalar_methods :name
|
|
657
720
|
children_methods({
|
|
658
721
|
interfaces: GraphQL::Language::Nodes::TypeName,
|
|
@@ -673,8 +736,7 @@ module GraphQL
|
|
|
673
736
|
end
|
|
674
737
|
|
|
675
738
|
class UnionTypeDefinition < AbstractNode
|
|
676
|
-
|
|
677
|
-
attr_reader :description, :types
|
|
739
|
+
attr_reader :description, :comment, :types
|
|
678
740
|
scalar_methods :name
|
|
679
741
|
children_methods({
|
|
680
742
|
directives: GraphQL::Language::Nodes::Directive,
|
|
@@ -692,8 +754,7 @@ module GraphQL
|
|
|
692
754
|
end
|
|
693
755
|
|
|
694
756
|
class EnumValueDefinition < AbstractNode
|
|
695
|
-
|
|
696
|
-
attr_reader :description
|
|
757
|
+
attr_reader :description, :comment
|
|
697
758
|
scalar_methods :name
|
|
698
759
|
children_methods({
|
|
699
760
|
directives: GraphQL::Language::Nodes::Directive,
|
|
@@ -702,8 +763,7 @@ module GraphQL
|
|
|
702
763
|
end
|
|
703
764
|
|
|
704
765
|
class EnumTypeDefinition < AbstractNode
|
|
705
|
-
|
|
706
|
-
attr_reader :description
|
|
766
|
+
attr_reader :description, :comment
|
|
707
767
|
scalar_methods :name
|
|
708
768
|
children_methods({
|
|
709
769
|
directives: GraphQL::Language::Nodes::Directive,
|
|
@@ -722,8 +782,7 @@ module GraphQL
|
|
|
722
782
|
end
|
|
723
783
|
|
|
724
784
|
class InputObjectTypeDefinition < AbstractNode
|
|
725
|
-
|
|
726
|
-
attr_reader :description
|
|
785
|
+
attr_reader :description, :comment
|
|
727
786
|
scalar_methods :name
|
|
728
787
|
children_methods({
|
|
729
788
|
directives: GraphQL::Language::Nodes::Directive,
|