graphql 2.0.31 → 2.6.1
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 +102 -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/field_resolve_step.rb +631 -0
- data/lib/graphql/execution/finalize.rb +217 -0
- data/lib/graphql/execution/input_values.rb +261 -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/handles_raw_value.rb +6 -0
- 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 +365 -435
- data/lib/graphql/execution/interpreter.rb +87 -163
- data/lib/graphql/execution/lazy.rb +1 -1
- data/lib/graphql/execution/load_argument_step.rb +64 -0
- data/lib/graphql/execution/lookahead.rb +105 -31
- data/lib/graphql/execution/multiplex.rb +7 -6
- data/lib/graphql/execution/next.rb +90 -0
- data/lib/graphql/execution/prepare_object_step.rb +128 -0
- data/lib/graphql/execution/runner.rb +410 -0
- data/lib/graphql/execution/selections_step.rb +91 -0
- data/lib/graphql/execution.rb +8 -4
- data/lib/graphql/execution_error.rb +17 -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 +323 -193
- data/lib/graphql/language/nodes.rb +139 -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 +62 -119
- 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 +88 -144
- data/lib/graphql/query/null_context.rb +15 -18
- data/lib/graphql/query/partial.rb +194 -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 +135 -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/runtime_error.rb +6 -0
- data/lib/graphql/schema/addition.rb +26 -13
- data/lib/graphql/schema/always_visible.rb +7 -2
- data/lib/graphql/schema/argument.rb +78 -14
- data/lib/graphql/schema/base_64_encoder.rb +3 -5
- data/lib/graphql/schema/build_from_definition.rb +140 -66
- 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 +78 -12
- data/lib/graphql/schema/enum.rb +110 -27
- data/lib/graphql/schema/enum_value.rb +11 -3
- data/lib/graphql/schema/field/connection_extension.rb +4 -51
- data/lib/graphql/schema/field/scope_extension.rb +19 -7
- data/lib/graphql/schema/field.rb +245 -119
- data/lib/graphql/schema/field_extension.rb +12 -9
- data/lib/graphql/schema/has_single_input_argument.rb +160 -0
- data/lib/graphql/schema/input_object.rb +123 -65
- data/lib/graphql/schema/interface.rb +60 -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 +8 -4
- data/lib/graphql/schema/loader.rb +3 -4
- data/lib/graphql/schema/member/base_dsl_methods.rb +18 -12
- 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 +5 -5
- data/lib/graphql/schema/member/has_fields.rb +121 -17
- data/lib/graphql/schema/member/has_interfaces.rb +27 -13
- 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 +18 -5
- 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/non_null.rb +1 -1
- 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 +128 -32
- data/lib/graphql/schema/scalar.rb +4 -9
- data/lib/graphql/schema/subscription.rb +63 -12
- 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 +464 -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/wrapper.rb +7 -1
- data/lib/graphql/schema.rb +954 -212
- data/lib/graphql/static_validation/all_rules.rb +3 -3
- data/lib/graphql/static_validation/base_visitor.rb +96 -71
- data/lib/graphql/static_validation/literal_validator.rb +6 -7
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +2 -2
- data/lib/graphql/static_validation/rules/argument_names_are_unique.rb +18 -6
- data/lib/graphql/static_validation/rules/arguments_are_defined.rb +6 -2
- data/lib/graphql/static_validation/rules/directives_are_defined.rb +6 -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 +14 -3
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +59 -15
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +391 -262
- data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +10 -2
- data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +6 -6
- data/lib/graphql/static_validation/rules/fragment_types_exist.rb +15 -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 +28 -8
- 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 +14 -2
- data/lib/graphql/static_validation/validation_context.rb +22 -6
- 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 +45 -19
- data/lib/graphql/subscriptions/event.rb +22 -4
- data/lib/graphql/subscriptions/serialize.rb +3 -1
- data/lib/graphql/subscriptions.rb +56 -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 +11 -3
- data/lib/graphql/tracing/appoptics_tracing.rb +9 -2
- data/lib/graphql/tracing/appsignal_trace.rb +32 -55
- 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 -158
- 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 +184 -34
- 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_trace.rb +5 -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 +72 -68
- data/lib/graphql/tracing/prometheus_tracing.rb +2 -0
- data/lib/graphql/tracing/scout_trace.rb +32 -55
- 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 -41
- data/lib/graphql/tracing/statsd_tracing.rb +2 -0
- data/lib/graphql/tracing/trace.rb +118 -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 +45 -3
- data/lib/graphql/types/relay/edge_behaviors.rb +19 -1
- 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 +9 -1
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +69 -54
- data/readme.md +12 -2
- metadata +236 -40
- 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
|
|
@@ -138,6 +145,8 @@ module GraphQL
|
|
|
138
145
|
end
|
|
139
146
|
|
|
140
147
|
class << self
|
|
148
|
+
# rubocop:disable Development/NoEvalCop This eval takes static inputs at load-time
|
|
149
|
+
|
|
141
150
|
# Add a default `#visit_method` and `#children_method_name` using the class name
|
|
142
151
|
def inherited(child_class)
|
|
143
152
|
super
|
|
@@ -196,8 +205,8 @@ module GraphQL
|
|
|
196
205
|
module_eval <<-RUBY, __FILE__, __LINE__
|
|
197
206
|
# Singular method: create a node with these options
|
|
198
207
|
# and return a new `self` which includes that node in this list.
|
|
199
|
-
def merge_#{method_name.to_s.sub(/s$/, "")}(node_opts)
|
|
200
|
-
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)])
|
|
201
210
|
end
|
|
202
211
|
RUBY
|
|
203
212
|
end
|
|
@@ -226,13 +235,14 @@ module GraphQL
|
|
|
226
235
|
end
|
|
227
236
|
|
|
228
237
|
if defined?(@scalar_methods)
|
|
229
|
-
if
|
|
230
|
-
|
|
238
|
+
if !@initialize_was_generated
|
|
239
|
+
@initialize_was_generated = true
|
|
240
|
+
generate_initialize
|
|
231
241
|
else
|
|
232
242
|
# This method was defined manually
|
|
233
243
|
end
|
|
234
244
|
else
|
|
235
|
-
raise "Can't
|
|
245
|
+
raise "Can't generate_initialize because scalar_methods wasn't called; call it before children_methods"
|
|
236
246
|
end
|
|
237
247
|
end
|
|
238
248
|
|
|
@@ -261,41 +271,85 @@ module GraphQL
|
|
|
261
271
|
end
|
|
262
272
|
end
|
|
263
273
|
|
|
264
|
-
|
|
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
|
+
|
|
265
287
|
scalar_method_names = @scalar_methods
|
|
266
288
|
# TODO: These probably should be scalar methods, but `types` returns an array
|
|
267
|
-
[:types, :description].each do |extra_method|
|
|
289
|
+
[:types, :description, :comment].each do |extra_method|
|
|
268
290
|
if method_defined?(extra_method)
|
|
269
291
|
scalar_method_names += [extra_method]
|
|
270
292
|
end
|
|
271
293
|
end
|
|
272
294
|
|
|
273
|
-
|
|
295
|
+
children_method_names = @children_methods.keys
|
|
296
|
+
|
|
297
|
+
all_method_names = scalar_method_names + children_method_names
|
|
274
298
|
if all_method_names.include?(:alias)
|
|
275
299
|
# Rather than complicating this special case,
|
|
276
300
|
# let it be overridden (in field)
|
|
277
301
|
return
|
|
278
302
|
else
|
|
279
303
|
arguments = scalar_method_names.map { |m| "#{m}: nil"} +
|
|
280
|
-
|
|
304
|
+
children_method_names.map { |m| "#{m}: NO_CHILDREN" } +
|
|
305
|
+
DEFAULT_INITIALIZE_OPTIONS
|
|
281
306
|
|
|
282
307
|
assignments = scalar_method_names.map { |m| "@#{m} = #{m}"} +
|
|
283
|
-
|
|
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
|
|
284
314
|
|
|
285
315
|
keywords = scalar_method_names.map { |m| "#{m}: #{m}"} +
|
|
286
|
-
|
|
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
|
|
287
323
|
|
|
288
324
|
module_eval <<-RUBY, __FILE__, __LINE__
|
|
289
|
-
def
|
|
325
|
+
def initialize(#{arguments.join(", ")})
|
|
326
|
+
@line = line
|
|
327
|
+
@col = col
|
|
328
|
+
@pos = pos
|
|
329
|
+
@filename = filename
|
|
330
|
+
@source = source
|
|
290
331
|
#{assignments.join("\n")}
|
|
291
332
|
end
|
|
292
333
|
|
|
293
|
-
def self.from_a(filename, line, col, #{(
|
|
334
|
+
def self.from_a(filename, line, col, #{marshalling_method_names.join(", ")}, #{ignored_keywords.join(", ")})
|
|
294
335
|
self.new(filename: filename, line: line, col: col, #{keywords.join(", ")})
|
|
295
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
|
|
296
349
|
RUBY
|
|
297
350
|
end
|
|
298
351
|
end
|
|
352
|
+
# rubocop:enable Development/NoEvalCop
|
|
299
353
|
end
|
|
300
354
|
end
|
|
301
355
|
|
|
@@ -323,7 +377,7 @@ module GraphQL
|
|
|
323
377
|
# @return [String, Float, Integer, Boolean, Array, InputObject, VariableIdentifier] The value passed for this key
|
|
324
378
|
|
|
325
379
|
def children
|
|
326
|
-
@children ||= Array(value).flatten.select { |v| v.is_a?(AbstractNode) }
|
|
380
|
+
@children ||= Array(value).flatten.tap { _1.select! { |v| v.is_a?(AbstractNode) } }
|
|
327
381
|
end
|
|
328
382
|
end
|
|
329
383
|
|
|
@@ -336,13 +390,13 @@ module GraphQL
|
|
|
336
390
|
end
|
|
337
391
|
|
|
338
392
|
class DirectiveDefinition < AbstractNode
|
|
339
|
-
include DefinitionNode
|
|
340
393
|
attr_reader :description
|
|
341
394
|
scalar_methods :name, :repeatable
|
|
342
395
|
children_methods(
|
|
343
396
|
arguments: Nodes::Argument,
|
|
344
397
|
locations: Nodes::DirectiveLocation,
|
|
345
398
|
)
|
|
399
|
+
self.children_method_name = :definitions
|
|
346
400
|
end
|
|
347
401
|
|
|
348
402
|
# An enum value. The string is available as {#name}.
|
|
@@ -355,6 +409,32 @@ module GraphQL
|
|
|
355
409
|
|
|
356
410
|
# A single selection in a GraphQL query.
|
|
357
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
|
+
|
|
358
438
|
scalar_methods :name, :alias
|
|
359
439
|
children_methods({
|
|
360
440
|
arguments: GraphQL::Language::Nodes::Argument,
|
|
@@ -362,44 +442,36 @@ module GraphQL
|
|
|
362
442
|
directives: GraphQL::Language::Nodes::Directive,
|
|
363
443
|
})
|
|
364
444
|
|
|
365
|
-
# @!attribute selections
|
|
366
|
-
# @return [Array<Nodes::Field>] Selections on this object (or empty array if this is a scalar field)
|
|
367
|
-
|
|
368
|
-
def initialize_node(attributes)
|
|
369
|
-
@name = attributes[:name]
|
|
370
|
-
@arguments = attributes[:arguments] || NONE
|
|
371
|
-
@directives = attributes[:directives] || NONE
|
|
372
|
-
@selections = attributes[:selections] || NONE
|
|
373
|
-
# oops, alias is a keyword:
|
|
374
|
-
@alias = attributes[:alias]
|
|
375
|
-
end
|
|
376
|
-
|
|
377
|
-
def self.from_a(filename, line, col, graphql_alias, name, arguments, directives, selections) # rubocop:disable Metrics/ParameterLists
|
|
378
|
-
self.new(filename: filename, line: line, col: col, alias: graphql_alias, name: name, arguments: arguments, directives: directives, selections: selections)
|
|
379
|
-
end
|
|
380
|
-
|
|
381
445
|
# Override this because default is `:fields`
|
|
382
446
|
self.children_method_name = :selections
|
|
383
447
|
end
|
|
384
448
|
|
|
385
449
|
# A reusable fragment, defined at document-level.
|
|
386
450
|
class FragmentDefinition < AbstractNode
|
|
387
|
-
|
|
388
|
-
# @return [String] the identifier for this fragment, which may be applied with `...#{name}`
|
|
389
|
-
|
|
390
|
-
# @!attribute type
|
|
391
|
-
# @return [String] the type condition for this fragment (name of type which it may apply to)
|
|
392
|
-
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)
|
|
393
452
|
@name = name
|
|
394
453
|
@type = type
|
|
395
454
|
@directives = directives
|
|
396
455
|
@selections = selections
|
|
456
|
+
@filename = filename
|
|
457
|
+
@pos = pos
|
|
458
|
+
@source = source
|
|
459
|
+
@line = line
|
|
460
|
+
@col = col
|
|
397
461
|
end
|
|
398
462
|
|
|
399
463
|
def self.from_a(filename, line, col, name, type, directives, selections)
|
|
400
464
|
self.new(filename: filename, line: line, col: col, name: name, type: type, directives: directives, selections: selections)
|
|
401
465
|
end
|
|
402
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
|
+
|
|
403
475
|
scalar_methods :name, :type
|
|
404
476
|
children_methods({
|
|
405
477
|
selections: GraphQL::Language::Nodes::Field,
|
|
@@ -484,7 +556,7 @@ module GraphQL
|
|
|
484
556
|
# An operation-level query variable
|
|
485
557
|
class VariableDefinition < AbstractNode
|
|
486
558
|
scalar_methods :name, :type, :default_value
|
|
487
|
-
children_methods
|
|
559
|
+
children_methods(directives: Directive)
|
|
488
560
|
# @!attribute default_value
|
|
489
561
|
# @return [String, Integer, Float, Boolean, Array, NullValue] A Ruby value to use if no other value is provided
|
|
490
562
|
|
|
@@ -535,7 +607,7 @@ module GraphQL
|
|
|
535
607
|
# @example Creating a custom string from a document
|
|
536
608
|
# class VariableScrubber < GraphQL::Language::Printer
|
|
537
609
|
# def print_argument(arg)
|
|
538
|
-
# "#{arg.name}: <HIDDEN>"
|
|
610
|
+
# print_string("#{arg.name}: <HIDDEN>")
|
|
539
611
|
# end
|
|
540
612
|
# end
|
|
541
613
|
#
|
|
@@ -562,7 +634,6 @@ module GraphQL
|
|
|
562
634
|
end
|
|
563
635
|
|
|
564
636
|
class SchemaDefinition < AbstractNode
|
|
565
|
-
include DefinitionNode
|
|
566
637
|
scalar_methods :query, :mutation, :subscription
|
|
567
638
|
children_methods({
|
|
568
639
|
directives: GraphQL::Language::Nodes::Directive,
|
|
@@ -579,8 +650,7 @@ module GraphQL
|
|
|
579
650
|
end
|
|
580
651
|
|
|
581
652
|
class ScalarTypeDefinition < AbstractNode
|
|
582
|
-
|
|
583
|
-
attr_reader :description
|
|
653
|
+
attr_reader :description, :comment
|
|
584
654
|
scalar_methods :name
|
|
585
655
|
children_methods({
|
|
586
656
|
directives: GraphQL::Language::Nodes::Directive,
|
|
@@ -597,8 +667,7 @@ module GraphQL
|
|
|
597
667
|
end
|
|
598
668
|
|
|
599
669
|
class InputValueDefinition < AbstractNode
|
|
600
|
-
|
|
601
|
-
attr_reader :description
|
|
670
|
+
attr_reader :description, :comment
|
|
602
671
|
scalar_methods :name, :type, :default_value
|
|
603
672
|
children_methods({
|
|
604
673
|
directives: GraphQL::Language::Nodes::Directive,
|
|
@@ -607,8 +676,7 @@ module GraphQL
|
|
|
607
676
|
end
|
|
608
677
|
|
|
609
678
|
class FieldDefinition < AbstractNode
|
|
610
|
-
|
|
611
|
-
attr_reader :description
|
|
679
|
+
attr_reader :description, :comment
|
|
612
680
|
scalar_methods :name, :type
|
|
613
681
|
children_methods({
|
|
614
682
|
arguments: GraphQL::Language::Nodes::InputValueDefinition,
|
|
@@ -628,8 +696,7 @@ module GraphQL
|
|
|
628
696
|
end
|
|
629
697
|
|
|
630
698
|
class ObjectTypeDefinition < AbstractNode
|
|
631
|
-
|
|
632
|
-
attr_reader :description
|
|
699
|
+
attr_reader :description, :comment
|
|
633
700
|
scalar_methods :name, :interfaces
|
|
634
701
|
children_methods({
|
|
635
702
|
directives: GraphQL::Language::Nodes::Directive,
|
|
@@ -648,8 +715,7 @@ module GraphQL
|
|
|
648
715
|
end
|
|
649
716
|
|
|
650
717
|
class InterfaceTypeDefinition < AbstractNode
|
|
651
|
-
|
|
652
|
-
attr_reader :description
|
|
718
|
+
attr_reader :description, :comment
|
|
653
719
|
scalar_methods :name
|
|
654
720
|
children_methods({
|
|
655
721
|
interfaces: GraphQL::Language::Nodes::TypeName,
|
|
@@ -670,8 +736,7 @@ module GraphQL
|
|
|
670
736
|
end
|
|
671
737
|
|
|
672
738
|
class UnionTypeDefinition < AbstractNode
|
|
673
|
-
|
|
674
|
-
attr_reader :description, :types
|
|
739
|
+
attr_reader :description, :comment, :types
|
|
675
740
|
scalar_methods :name
|
|
676
741
|
children_methods({
|
|
677
742
|
directives: GraphQL::Language::Nodes::Directive,
|
|
@@ -689,8 +754,7 @@ module GraphQL
|
|
|
689
754
|
end
|
|
690
755
|
|
|
691
756
|
class EnumValueDefinition < AbstractNode
|
|
692
|
-
|
|
693
|
-
attr_reader :description
|
|
757
|
+
attr_reader :description, :comment
|
|
694
758
|
scalar_methods :name
|
|
695
759
|
children_methods({
|
|
696
760
|
directives: GraphQL::Language::Nodes::Directive,
|
|
@@ -699,8 +763,7 @@ module GraphQL
|
|
|
699
763
|
end
|
|
700
764
|
|
|
701
765
|
class EnumTypeDefinition < AbstractNode
|
|
702
|
-
|
|
703
|
-
attr_reader :description
|
|
766
|
+
attr_reader :description, :comment
|
|
704
767
|
scalar_methods :name
|
|
705
768
|
children_methods({
|
|
706
769
|
directives: GraphQL::Language::Nodes::Directive,
|
|
@@ -719,8 +782,7 @@ module GraphQL
|
|
|
719
782
|
end
|
|
720
783
|
|
|
721
784
|
class InputObjectTypeDefinition < AbstractNode
|
|
722
|
-
|
|
723
|
-
attr_reader :description
|
|
785
|
+
attr_reader :description, :comment
|
|
724
786
|
scalar_methods :name
|
|
725
787
|
children_methods({
|
|
726
788
|
directives: GraphQL::Language::Nodes::Directive,
|