graphql 1.12.12 → 2.2.14
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 +3 -8
- data/lib/generators/graphql/enum_generator.rb +4 -10
- data/lib/generators/graphql/field_extractor.rb +31 -0
- data/lib/generators/graphql/input_generator.rb +50 -0
- data/lib/generators/graphql/install/mutation_root_generator.rb +34 -0
- data/lib/generators/graphql/{templates → install/templates}/base_mutation.erb +2 -0
- data/lib/generators/graphql/{templates → install/templates}/mutation_type.erb +2 -0
- data/lib/generators/graphql/install_generator.rb +14 -4
- data/lib/generators/graphql/interface_generator.rb +7 -7
- data/lib/generators/graphql/mutation_create_generator.rb +22 -0
- data/lib/generators/graphql/mutation_delete_generator.rb +22 -0
- data/lib/generators/graphql/mutation_generator.rb +5 -30
- data/lib/generators/graphql/mutation_update_generator.rb +22 -0
- data/lib/generators/graphql/object_generator.rb +10 -38
- data/lib/generators/graphql/orm_mutations_base.rb +40 -0
- data/lib/generators/graphql/relay.rb +23 -12
- data/lib/generators/graphql/scalar_generator.rb +4 -2
- 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 +6 -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 +5 -1
- data/lib/generators/graphql/templates/graphql_controller.erb +2 -0
- data/lib/generators/graphql/templates/input.erb +9 -0
- data/lib/generators/graphql/templates/interface.erb +4 -2
- data/lib/generators/graphql/templates/loader.erb +2 -0
- data/lib/generators/graphql/templates/mutation.erb +3 -1
- data/lib/generators/graphql/templates/mutation_create.erb +20 -0
- data/lib/generators/graphql/templates/mutation_delete.erb +20 -0
- data/lib/generators/graphql/templates/mutation_update.erb +21 -0
- data/lib/generators/graphql/templates/node_type.erb +2 -0
- data/lib/generators/graphql/templates/object.erb +4 -2
- data/lib/generators/graphql/templates/query_type.erb +2 -0
- data/lib/generators/graphql/templates/scalar.erb +3 -1
- data/lib/generators/graphql/templates/schema.erb +19 -2
- data/lib/generators/graphql/templates/union.erb +4 -2
- data/lib/generators/graphql/type_generator.rb +46 -10
- data/lib/generators/graphql/union_generator.rb +5 -5
- data/lib/graphql/analysis/ast/analyzer.rb +7 -0
- data/lib/graphql/analysis/ast/field_usage.rb +55 -1
- data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
- data/lib/graphql/analysis/ast/query_complexity.rb +88 -140
- data/lib/graphql/analysis/ast/query_depth.rb +7 -3
- data/lib/graphql/analysis/ast/visitor.rb +50 -42
- data/lib/graphql/analysis/ast.rb +26 -23
- data/lib/graphql/analysis.rb +0 -7
- data/lib/graphql/backtrace/table.rb +4 -22
- data/lib/graphql/backtrace/trace.rb +93 -0
- data/lib/graphql/backtrace/tracer.rb +8 -6
- data/lib/graphql/backtrace.rb +3 -8
- data/lib/graphql/coercion_error.rb +1 -9
- data/lib/graphql/dataloader/async_dataloader.rb +85 -0
- data/lib/graphql/dataloader/null_dataloader.rb +3 -1
- data/lib/graphql/dataloader/request.rb +5 -0
- data/lib/graphql/dataloader/source.rb +120 -31
- data/lib/graphql/dataloader.rb +168 -142
- data/lib/graphql/date_encoding_error.rb +16 -0
- data/lib/graphql/dig.rb +1 -1
- data/lib/graphql/duration_encoding_error.rb +16 -0
- data/lib/graphql/execution/errors.rb +12 -81
- data/lib/graphql/execution/interpreter/arguments.rb +2 -2
- data/lib/graphql/execution/interpreter/arguments_cache.rb +36 -34
- data/lib/graphql/execution/interpreter/resolve.rb +32 -2
- data/lib/graphql/execution/interpreter/runtime/graphql_result.rb +170 -0
- data/lib/graphql/execution/interpreter/runtime.rb +414 -341
- data/lib/graphql/execution/interpreter.rb +122 -80
- data/lib/graphql/execution/lazy.rb +11 -21
- data/lib/graphql/execution/lookahead.rb +125 -54
- data/lib/graphql/execution/multiplex.rb +4 -172
- data/lib/graphql/execution.rb +11 -4
- data/lib/graphql/integer_encoding_error.rb +18 -2
- data/lib/graphql/introspection/directive_location_enum.rb +2 -2
- data/lib/graphql/introspection/directive_type.rb +5 -3
- data/lib/graphql/introspection/dynamic_fields.rb +3 -8
- data/lib/graphql/introspection/entry_points.rb +11 -18
- data/lib/graphql/introspection/enum_value_type.rb +2 -2
- data/lib/graphql/introspection/field_type.rb +3 -3
- data/lib/graphql/introspection/input_value_type.rb +10 -4
- data/lib/graphql/introspection/schema_type.rb +12 -5
- data/lib/graphql/introspection/type_type.rb +25 -12
- data/lib/graphql/introspection.rb +6 -2
- data/lib/graphql/language/block_string.rb +37 -25
- data/lib/graphql/language/definition_slice.rb +1 -1
- data/lib/graphql/language/document_from_schema_definition.rb +78 -65
- data/lib/graphql/language/lexer.rb +345 -1467
- data/lib/graphql/language/nodes.rb +145 -91
- data/lib/graphql/language/parser.rb +701 -1921
- data/lib/graphql/language/printer.rb +351 -155
- data/lib/graphql/language/sanitized_printer.rb +25 -27
- data/lib/graphql/language/static_visitor.rb +167 -0
- data/lib/graphql/language/token.rb +0 -4
- data/lib/graphql/language/visitor.rb +188 -141
- data/lib/graphql/language.rb +1 -0
- data/lib/graphql/load_application_object_failed_error.rb +5 -1
- data/lib/graphql/name_validator.rb +0 -4
- data/lib/graphql/pagination/active_record_relation_connection.rb +37 -8
- data/lib/graphql/pagination/array_connection.rb +8 -6
- data/lib/graphql/pagination/connection.rb +61 -7
- data/lib/graphql/pagination/connections.rb +22 -23
- data/lib/graphql/pagination/mongoid_relation_connection.rb +1 -2
- data/lib/graphql/pagination/relation_connection.rb +60 -28
- data/lib/graphql/query/context/scoped_context.rb +101 -0
- data/lib/graphql/query/context.rb +109 -189
- data/lib/graphql/query/input_validation_result.rb +10 -1
- data/lib/graphql/query/null_context.rb +14 -29
- data/lib/graphql/query/validation_pipeline.rb +15 -39
- data/lib/graphql/query/variable_validation_error.rb +2 -2
- data/lib/graphql/query/variables.rb +35 -17
- data/lib/graphql/query.rb +78 -65
- data/lib/graphql/railtie.rb +8 -109
- data/lib/graphql/rake_task/validate.rb +1 -1
- data/lib/graphql/rake_task.rb +30 -11
- data/lib/graphql/relay/range_add.rb +9 -16
- data/lib/graphql/relay.rb +0 -15
- 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 +78 -45
- data/lib/graphql/schema/always_visible.rb +10 -0
- data/lib/graphql/schema/argument.rb +134 -80
- data/lib/graphql/schema/base_64_encoder.rb +3 -5
- data/lib/graphql/schema/build_from_definition.rb +60 -38
- 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/one_of.rb +24 -0
- data/lib/graphql/schema/directive/skip.rb +1 -1
- data/lib/graphql/schema/directive/specified_by.rb +14 -0
- data/lib/graphql/schema/directive/transform.rb +2 -2
- data/lib/graphql/schema/directive.rb +33 -21
- data/lib/graphql/schema/enum.rb +93 -46
- data/lib/graphql/schema/enum_value.rb +4 -21
- data/lib/graphql/schema/field/connection_extension.rb +6 -16
- data/lib/graphql/schema/field/scope_extension.rb +8 -1
- data/lib/graphql/schema/field.rb +432 -337
- data/lib/graphql/schema/field_extension.rb +86 -2
- data/lib/graphql/schema/find_inherited_value.rb +3 -7
- data/lib/graphql/schema/finder.rb +5 -5
- data/lib/graphql/schema/has_single_input_argument.rb +156 -0
- data/lib/graphql/schema/input_object.rb +88 -90
- data/lib/graphql/schema/interface.rb +19 -59
- data/lib/graphql/schema/introspection_system.rb +6 -9
- data/lib/graphql/schema/late_bound_type.rb +8 -2
- data/lib/graphql/schema/list.rb +18 -7
- data/lib/graphql/schema/loader.rb +3 -3
- data/lib/graphql/schema/member/base_dsl_methods.rb +18 -19
- data/lib/graphql/schema/member/build_type.rb +16 -13
- data/lib/graphql/schema/member/has_arguments.rb +288 -84
- data/lib/graphql/schema/member/has_ast_node.rb +12 -0
- data/lib/graphql/schema/member/has_deprecation_reason.rb +3 -4
- data/lib/graphql/schema/member/has_directives.rb +81 -61
- data/lib/graphql/schema/member/has_fields.rb +149 -31
- data/lib/graphql/schema/member/has_interfaces.rb +143 -0
- data/lib/graphql/schema/member/has_validators.rb +32 -6
- data/lib/graphql/schema/member/relay_shortcuts.rb +47 -2
- data/lib/graphql/schema/member/scoped.rb +19 -0
- data/lib/graphql/schema/member/type_system_helpers.rb +17 -0
- data/lib/graphql/schema/member/validates_input.rb +6 -6
- data/lib/graphql/schema/member.rb +1 -6
- data/lib/graphql/schema/mutation.rb +0 -9
- data/lib/graphql/schema/non_null.rb +7 -7
- data/lib/graphql/schema/object.rb +30 -119
- data/lib/graphql/schema/printer.rb +23 -25
- data/lib/graphql/schema/relay_classic_mutation.rb +13 -90
- data/lib/graphql/schema/resolver/has_payload_type.rb +46 -11
- data/lib/graphql/schema/resolver.rb +101 -102
- data/lib/graphql/schema/scalar.rb +20 -21
- data/lib/graphql/schema/subscription.rb +45 -17
- data/lib/graphql/schema/timeout.rb +25 -29
- data/lib/graphql/schema/type_expression.rb +1 -1
- data/lib/graphql/schema/type_membership.rb +21 -4
- data/lib/graphql/schema/union.rb +15 -15
- data/lib/graphql/schema/unique_within_type.rb +1 -1
- data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
- data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
- data/lib/graphql/schema/validator/exclusion_validator.rb +3 -1
- data/lib/graphql/schema/validator/format_validator.rb +4 -5
- data/lib/graphql/schema/validator/inclusion_validator.rb +3 -1
- data/lib/graphql/schema/validator/length_validator.rb +5 -3
- data/lib/graphql/schema/validator/numericality_validator.rb +13 -2
- data/lib/graphql/schema/validator/required_validator.rb +29 -15
- data/lib/graphql/schema/validator.rb +35 -27
- data/lib/graphql/schema/warden.rb +259 -132
- data/lib/graphql/schema/wrapper.rb +0 -5
- data/lib/graphql/schema.rb +658 -989
- data/lib/graphql/static_validation/all_rules.rb +3 -1
- data/lib/graphql/static_validation/base_visitor.rb +14 -28
- data/lib/graphql/static_validation/definition_dependencies.rb +7 -2
- data/lib/graphql/static_validation/error.rb +3 -1
- data/lib/graphql/static_validation/literal_validator.rb +21 -4
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +1 -1
- data/lib/graphql/static_validation/rules/arguments_are_defined.rb +1 -1
- data/lib/graphql/static_validation/rules/directives_are_defined.rb +11 -5
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +13 -13
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +12 -4
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +54 -28
- data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
- data/lib/graphql/static_validation/rules/fragments_are_finite.rb +2 -2
- data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +66 -0
- data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +29 -0
- data/lib/graphql/static_validation/rules/query_root_exists.rb +17 -0
- data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
- data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +5 -3
- data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +4 -4
- data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +13 -7
- data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +1 -1
- data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +13 -7
- data/lib/graphql/static_validation/validation_context.rb +16 -6
- data/lib/graphql/static_validation/validator.rb +11 -27
- data/lib/graphql/static_validation.rb +0 -3
- data/lib/graphql/string_encoding_error.rb +13 -3
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +46 -9
- data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +38 -1
- data/lib/graphql/subscriptions/event.rb +75 -37
- data/lib/graphql/subscriptions/serialize.rb +25 -3
- data/lib/graphql/subscriptions.rb +59 -47
- data/lib/graphql/testing/helpers.rb +129 -0
- data/lib/graphql/testing.rb +2 -0
- data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +6 -20
- data/lib/graphql/tracing/appoptics_trace.rb +251 -0
- data/lib/graphql/tracing/appoptics_tracing.rb +2 -2
- data/lib/graphql/tracing/appsignal_trace.rb +77 -0
- data/lib/graphql/tracing/appsignal_tracing.rb +15 -0
- data/lib/graphql/tracing/data_dog_trace.rb +183 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +25 -15
- data/lib/graphql/{execution/instrumentation.rb → tracing/legacy_hooks_trace.rb} +10 -28
- data/lib/graphql/tracing/legacy_trace.rb +69 -0
- data/lib/graphql/tracing/new_relic_trace.rb +75 -0
- data/lib/graphql/tracing/notifications_trace.rb +45 -0
- data/lib/graphql/tracing/notifications_tracing.rb +59 -0
- data/lib/graphql/tracing/platform_trace.rb +118 -0
- data/lib/graphql/tracing/platform_tracing.rb +46 -49
- data/lib/graphql/tracing/{prometheus_tracing → prometheus_trace}/graphql_collector.rb +4 -2
- data/lib/graphql/tracing/prometheus_trace.rb +89 -0
- data/lib/graphql/tracing/prometheus_tracing.rb +3 -3
- data/lib/graphql/tracing/scout_trace.rb +72 -0
- data/lib/graphql/tracing/sentry_trace.rb +112 -0
- data/lib/graphql/tracing/statsd_trace.rb +56 -0
- data/lib/graphql/tracing/trace.rb +76 -0
- data/lib/graphql/tracing.rb +20 -41
- data/lib/graphql/type_kinds.rb +6 -3
- data/lib/graphql/types/big_int.rb +5 -1
- data/lib/graphql/types/int.rb +1 -1
- data/lib/graphql/types/iso_8601_date.rb +17 -6
- data/lib/graphql/types/iso_8601_date_time.rb +12 -1
- data/lib/graphql/types/iso_8601_duration.rb +77 -0
- data/lib/graphql/types/relay/base_connection.rb +16 -6
- data/lib/graphql/types/relay/connection_behaviors.rb +82 -32
- data/lib/graphql/types/relay/edge_behaviors.rb +36 -7
- data/lib/graphql/types/relay/has_node_field.rb +2 -2
- data/lib/graphql/types/relay/has_nodes_field.rb +2 -2
- data/lib/graphql/types/relay/node_behaviors.rb +12 -2
- data/lib/graphql/types/relay/page_info_behaviors.rb +7 -2
- data/lib/graphql/types/relay.rb +0 -3
- data/lib/graphql/types/string.rb +2 -2
- data/lib/graphql/types.rb +1 -0
- data/lib/graphql/unauthorized_error.rb +1 -1
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +33 -95
- data/readme.md +13 -6
- metadata +102 -185
- data/lib/graphql/analysis/analyze_query.rb +0 -98
- data/lib/graphql/analysis/field_usage.rb +0 -45
- data/lib/graphql/analysis/max_query_complexity.rb +0 -26
- data/lib/graphql/analysis/max_query_depth.rb +0 -26
- data/lib/graphql/analysis/query_complexity.rb +0 -88
- data/lib/graphql/analysis/query_depth.rb +0 -43
- data/lib/graphql/analysis/reducer_state.rb +0 -48
- data/lib/graphql/argument.rb +0 -131
- data/lib/graphql/authorization.rb +0 -82
- data/lib/graphql/backtrace/legacy_tracer.rb +0 -56
- data/lib/graphql/backwards_compatibility.rb +0 -61
- data/lib/graphql/base_type.rb +0 -230
- data/lib/graphql/boolean_type.rb +0 -2
- data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
- data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
- data/lib/graphql/compatibility/execution_specification.rb +0 -436
- data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
- data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -215
- data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
- data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
- data/lib/graphql/compatibility/query_parser_specification.rb +0 -266
- data/lib/graphql/compatibility/schema_parser_specification.rb +0 -682
- data/lib/graphql/compatibility.rb +0 -5
- data/lib/graphql/define/assign_argument.rb +0 -12
- data/lib/graphql/define/assign_connection.rb +0 -13
- data/lib/graphql/define/assign_enum_value.rb +0 -18
- data/lib/graphql/define/assign_global_id_field.rb +0 -11
- data/lib/graphql/define/assign_mutation_function.rb +0 -34
- data/lib/graphql/define/assign_object_field.rb +0 -42
- data/lib/graphql/define/defined_object_proxy.rb +0 -53
- data/lib/graphql/define/instance_definable.rb +0 -240
- data/lib/graphql/define/no_definition_error.rb +0 -7
- data/lib/graphql/define/non_null_with_bang.rb +0 -16
- data/lib/graphql/define/type_definer.rb +0 -31
- data/lib/graphql/define.rb +0 -31
- data/lib/graphql/deprecated_dsl.rb +0 -47
- data/lib/graphql/deprecation.rb +0 -13
- data/lib/graphql/directive/deprecated_directive.rb +0 -2
- data/lib/graphql/directive/include_directive.rb +0 -2
- data/lib/graphql/directive/skip_directive.rb +0 -2
- data/lib/graphql/directive.rb +0 -111
- data/lib/graphql/enum_type.rb +0 -129
- data/lib/graphql/execution/execute.rb +0 -333
- data/lib/graphql/execution/flatten.rb +0 -40
- data/lib/graphql/execution/lazy/resolve.rb +0 -91
- data/lib/graphql/execution/typecast.rb +0 -50
- data/lib/graphql/field/resolve.rb +0 -59
- data/lib/graphql/field.rb +0 -226
- data/lib/graphql/filter.rb +0 -53
- data/lib/graphql/float_type.rb +0 -2
- data/lib/graphql/function.rb +0 -128
- data/lib/graphql/id_type.rb +0 -2
- data/lib/graphql/input_object_type.rb +0 -138
- data/lib/graphql/int_type.rb +0 -2
- data/lib/graphql/interface_type.rb +0 -72
- data/lib/graphql/internal_representation/document.rb +0 -27
- data/lib/graphql/internal_representation/node.rb +0 -206
- data/lib/graphql/internal_representation/print.rb +0 -51
- data/lib/graphql/internal_representation/rewrite.rb +0 -184
- data/lib/graphql/internal_representation/scope.rb +0 -88
- data/lib/graphql/internal_representation/visit.rb +0 -36
- data/lib/graphql/internal_representation.rb +0 -7
- data/lib/graphql/language/lexer.rl +0 -262
- data/lib/graphql/language/parser.y +0 -543
- data/lib/graphql/list_type.rb +0 -80
- data/lib/graphql/non_null_type.rb +0 -71
- data/lib/graphql/object_type.rb +0 -130
- data/lib/graphql/query/arguments.rb +0 -189
- data/lib/graphql/query/arguments_cache.rb +0 -24
- data/lib/graphql/query/executor.rb +0 -52
- data/lib/graphql/query/literal_input.rb +0 -136
- data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
- data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
- data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
- data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
- data/lib/graphql/query/serial_execution.rb +0 -40
- data/lib/graphql/relay/array_connection.rb +0 -83
- data/lib/graphql/relay/base_connection.rb +0 -189
- data/lib/graphql/relay/connection_instrumentation.rb +0 -54
- data/lib/graphql/relay/connection_resolve.rb +0 -43
- data/lib/graphql/relay/connection_type.rb +0 -41
- data/lib/graphql/relay/edge.rb +0 -27
- data/lib/graphql/relay/edge_type.rb +0 -19
- data/lib/graphql/relay/edges_instrumentation.rb +0 -40
- data/lib/graphql/relay/global_id_resolve.rb +0 -18
- data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
- data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
- data/lib/graphql/relay/mutation/resolve.rb +0 -56
- data/lib/graphql/relay/mutation/result.rb +0 -38
- data/lib/graphql/relay/mutation.rb +0 -106
- data/lib/graphql/relay/node.rb +0 -39
- data/lib/graphql/relay/page_info.rb +0 -7
- data/lib/graphql/relay/relation_connection.rb +0 -188
- data/lib/graphql/relay/type_extensions.rb +0 -32
- data/lib/graphql/scalar_type.rb +0 -91
- data/lib/graphql/schema/base_64_bp.rb +0 -26
- data/lib/graphql/schema/catchall_middleware.rb +0 -35
- data/lib/graphql/schema/default_parse_error.rb +0 -10
- data/lib/graphql/schema/default_type_error.rb +0 -17
- data/lib/graphql/schema/member/accepts_definition.rb +0 -152
- data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -31
- data/lib/graphql/schema/member/instrumentation.rb +0 -131
- data/lib/graphql/schema/middleware_chain.rb +0 -82
- data/lib/graphql/schema/possible_types.rb +0 -44
- data/lib/graphql/schema/rescue_middleware.rb +0 -60
- data/lib/graphql/schema/timeout_middleware.rb +0 -88
- data/lib/graphql/schema/traversal.rb +0 -228
- data/lib/graphql/schema/validation.rb +0 -313
- data/lib/graphql/static_validation/default_visitor.rb +0 -15
- data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
- data/lib/graphql/static_validation/type_stack.rb +0 -216
- data/lib/graphql/string_type.rb +0 -2
- data/lib/graphql/subscriptions/instrumentation.rb +0 -79
- data/lib/graphql/subscriptions/subscription_root.rb +0 -76
- data/lib/graphql/tracing/skylight_tracing.rb +0 -70
- data/lib/graphql/types/relay/default_relay.rb +0 -27
- data/lib/graphql/types/relay/node_field.rb +0 -25
- data/lib/graphql/types/relay/nodes_field.rb +0 -27
- data/lib/graphql/union_type.rb +0 -115
- data/lib/graphql/upgrader/member.rb +0 -937
- data/lib/graphql/upgrader/schema.rb +0 -38
@@ -14,41 +14,37 @@ module GraphQL
|
|
14
14
|
schema = ctx.schema
|
15
15
|
@context = ctx
|
16
16
|
|
17
|
-
@provided_variables =
|
17
|
+
@provided_variables = deep_stringify(provided_variables)
|
18
18
|
@errors = []
|
19
19
|
@storage = ast_variables.each_with_object({}) do |ast_variable, memo|
|
20
|
+
if schema.validate_max_errors && schema.validate_max_errors <= @errors.count
|
21
|
+
add_max_errors_reached_message
|
22
|
+
break
|
23
|
+
end
|
20
24
|
# Find the right value for this variable:
|
21
25
|
# - First, use the value provided at runtime
|
22
26
|
# - Then, fall back to the default value from the query string
|
23
27
|
# If it's still nil, raise an error if it's required.
|
24
28
|
variable_type = schema.type_from_ast(ast_variable.type, context: ctx)
|
25
|
-
if variable_type.nil?
|
29
|
+
if variable_type.nil? || !variable_type.unwrap.kind.input?
|
26
30
|
# Pass -- it will get handled by a validator
|
27
31
|
else
|
28
32
|
variable_name = ast_variable.name
|
29
33
|
default_value = ast_variable.default_value
|
30
34
|
provided_value = @provided_variables[variable_name]
|
31
35
|
value_was_provided = @provided_variables.key?(variable_name)
|
36
|
+
max_errors = schema.validate_max_errors - @errors.count if schema.validate_max_errors
|
32
37
|
begin
|
33
|
-
validation_result = variable_type.validate_input(provided_value, ctx)
|
38
|
+
validation_result = variable_type.validate_input(provided_value, ctx, max_errors: max_errors)
|
34
39
|
if validation_result.valid?
|
35
40
|
if value_was_provided
|
36
41
|
# Add the variable if a value was provided
|
37
|
-
memo[variable_name] =
|
38
|
-
|
39
|
-
|
42
|
+
memo[variable_name] = provided_value
|
43
|
+
elsif default_value != nil
|
44
|
+
memo[variable_name] = if default_value.is_a?(Language::Nodes::NullValue)
|
40
45
|
nil
|
41
46
|
else
|
42
|
-
schema.error_handler.with_error_handling(context) do
|
43
|
-
variable_type.coerce_input(provided_value, ctx)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
elsif default_value != nil
|
47
|
-
memo[variable_name] = if ctx.interpreter?
|
48
47
|
default_value
|
49
|
-
else
|
50
|
-
# Add the variable if it wasn't provided but it has a default value (including `null`)
|
51
|
-
GraphQL::Query::LiteralInput.coerce(variable_type, default_value, self)
|
52
48
|
end
|
53
49
|
end
|
54
50
|
end
|
@@ -57,8 +53,7 @@ module GraphQL
|
|
57
53
|
# like InputValidationResults generated by validate_non_null_input but unfortunately we don't
|
58
54
|
# have this information available in the coerce_input call chain. Note this path is the path
|
59
55
|
# that appears under errors.extensions.problems.path and NOT the result path under errors.path.
|
60
|
-
validation_result = GraphQL::Query::InputValidationResult.
|
61
|
-
validation_result.add_problem(ex.message)
|
56
|
+
validation_result = GraphQL::Query::InputValidationResult.from_problem(ex.message)
|
62
57
|
end
|
63
58
|
|
64
59
|
if !validation_result.valid?
|
@@ -69,6 +64,29 @@ module GraphQL
|
|
69
64
|
end
|
70
65
|
|
71
66
|
def_delegators :@storage, :length, :key?, :[], :fetch, :to_h
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def deep_stringify(val)
|
71
|
+
case val
|
72
|
+
when Array
|
73
|
+
val.map { |v| deep_stringify(v) }
|
74
|
+
when Hash
|
75
|
+
new_val = {}
|
76
|
+
val.each do |k, v|
|
77
|
+
new_val[k.to_s] = deep_stringify(v)
|
78
|
+
end
|
79
|
+
new_val
|
80
|
+
else
|
81
|
+
val
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def add_max_errors_reached_message
|
86
|
+
message = "Too many errors processing variables, max validation error limit reached. Execution aborted"
|
87
|
+
validation_result = GraphQL::Query::InputValidationResult.from_problem(message)
|
88
|
+
errors << GraphQL::Query::VariableValidationError.new(nil, nil, nil, validation_result, msg: message)
|
89
|
+
end
|
72
90
|
end
|
73
91
|
end
|
74
92
|
end
|
data/lib/graphql/query.rb
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require "graphql/query/arguments"
|
3
|
-
require "graphql/query/arguments_cache"
|
4
2
|
require "graphql/query/context"
|
5
|
-
require "graphql/query/executor"
|
6
3
|
require "graphql/query/fingerprint"
|
7
|
-
require "graphql/query/literal_input"
|
8
4
|
require "graphql/query/null_context"
|
9
5
|
require "graphql/query/result"
|
10
|
-
require "graphql/query/serial_execution"
|
11
6
|
require "graphql/query/variables"
|
12
7
|
require "graphql/query/input_validation_result"
|
13
8
|
require "graphql/query/variable_validation_error"
|
@@ -39,7 +34,30 @@ module GraphQL
|
|
39
34
|
attr_accessor :operation_name
|
40
35
|
|
41
36
|
# @return [Boolean] if false, static validation is skipped (execution behavior for invalid queries is undefined)
|
42
|
-
|
37
|
+
attr_reader :validate
|
38
|
+
|
39
|
+
# @param new_validate [Boolean] if false, static validation is skipped. This can't be reasssigned after validation.
|
40
|
+
def validate=(new_validate)
|
41
|
+
if defined?(@validation_pipeline) && @validation_pipeline && @validation_pipeline.has_validated?
|
42
|
+
raise ArgumentError, "Can't reassign Query#validate= after validation has run, remove this assignment."
|
43
|
+
else
|
44
|
+
@validate = new_validate
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# @return [GraphQL::StaticValidation::Validator] if present, the query will validate with these rules.
|
49
|
+
attr_reader :static_validator
|
50
|
+
|
51
|
+
# @param new_validate [GraphQL::StaticValidation::Validator] if present, the query will validate with these rules. This can't be reasssigned after validation.
|
52
|
+
def static_validator=(new_validator)
|
53
|
+
if defined?(@validation_pipeline) && @validation_pipeline && @validation_pipeline.has_validated?
|
54
|
+
raise ArgumentError, "Can't reassign Query#static_validator= after validation has run, remove this assignment."
|
55
|
+
elsif !new_validator.is_a?(GraphQL::StaticValidation::Validator)
|
56
|
+
raise ArgumentError, "Expected a `GraphQL::StaticValidation::Validator` instance."
|
57
|
+
else
|
58
|
+
@static_validator = new_validator
|
59
|
+
end
|
60
|
+
end
|
43
61
|
|
44
62
|
attr_writer :query_string
|
45
63
|
|
@@ -77,19 +95,10 @@ module GraphQL
|
|
77
95
|
# @param root_value [Object] the object used to resolve fields on the root type
|
78
96
|
# @param max_depth [Numeric] the maximum number of nested selections allowed for this query (falls back to schema-level value)
|
79
97
|
# @param max_complexity [Numeric] the maximum field complexity for this query (falls back to schema-level value)
|
80
|
-
|
81
|
-
# @param only [<#call(schema_member, context)>] If provided, objects will be hidden from the schema when `.call(schema_member, context)` returns false
|
82
|
-
def initialize(schema, query_string = nil, query: nil, document: nil, context: nil, variables: nil, validate: true, subscription_topic: nil, operation_name: nil, root_value: nil, max_depth: schema.max_depth, max_complexity: schema.max_complexity, except: nil, only: nil, warden: nil)
|
98
|
+
def initialize(schema, query_string = nil, query: nil, document: nil, context: nil, variables: nil, validate: true, static_validator: nil, subscription_topic: nil, operation_name: nil, root_value: nil, max_depth: schema.max_depth, max_complexity: schema.max_complexity, warden: nil)
|
83
99
|
# Even if `variables: nil` is passed, use an empty hash for simpler logic
|
84
100
|
variables ||= {}
|
85
|
-
|
86
|
-
# Use the `.graphql_definition` here which will return legacy types instead of classes
|
87
|
-
if schema.is_a?(Class) && !schema.interpreter?
|
88
|
-
schema = schema.graphql_definition
|
89
|
-
end
|
90
101
|
@schema = schema
|
91
|
-
@interpreter = @schema.interpreter?
|
92
|
-
@filter = schema.default_filter.merge(except: except, only: only)
|
93
102
|
@context = schema.context_class.new(query: self, object: root_value, values: context)
|
94
103
|
@warden = warden
|
95
104
|
@subscription_topic = subscription_topic
|
@@ -97,10 +106,20 @@ module GraphQL
|
|
97
106
|
@fragments = nil
|
98
107
|
@operations = nil
|
99
108
|
@validate = validate
|
100
|
-
|
109
|
+
self.static_validator = static_validator if static_validator
|
110
|
+
context_tracers = (context ? context.fetch(:tracers, []) : [])
|
111
|
+
@tracers = schema.tracers + context_tracers
|
112
|
+
|
101
113
|
# Support `ctx[:backtrace] = true` for wrapping backtraces
|
102
114
|
if context && context[:backtrace] && !@tracers.include?(GraphQL::Backtrace::Tracer)
|
103
|
-
|
115
|
+
if schema.trace_class <= GraphQL::Tracing::CallLegacyTracers
|
116
|
+
context_tracers += [GraphQL::Backtrace::Tracer]
|
117
|
+
@tracers << GraphQL::Backtrace::Tracer
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
if context_tracers.any? && !(schema.trace_class <= GraphQL::Tracing::CallLegacyTracers)
|
122
|
+
raise ArgumentError, "context[:tracers] are not supported without `trace_with(GraphQL::Tracing::CallLegacyTracers)` in the schema configuration, please add it."
|
104
123
|
end
|
105
124
|
|
106
125
|
@analysis_errors = []
|
@@ -117,6 +136,10 @@ module GraphQL
|
|
117
136
|
raise ArgumentError, "Query should only be provided a query string or a document, not both."
|
118
137
|
end
|
119
138
|
|
139
|
+
if @query_string && !@query_string.is_a?(String)
|
140
|
+
raise ArgumentError, "Query string argument should be a String, got #{@query_string.class.name} instead."
|
141
|
+
end
|
142
|
+
|
120
143
|
# A two-layer cache of type resolution:
|
121
144
|
# { abstract_type => { value => resolved_type } }
|
122
145
|
@resolved_types_cache = Hash.new do |h1, k1|
|
@@ -138,9 +161,12 @@ module GraphQL
|
|
138
161
|
@result_values = nil
|
139
162
|
@executed = false
|
140
163
|
|
141
|
-
|
142
|
-
|
143
|
-
|
164
|
+
@logger = if context && context[:logger] == false
|
165
|
+
Logger.new(IO::NULL)
|
166
|
+
elsif context && (l = context[:logger])
|
167
|
+
l
|
168
|
+
else
|
169
|
+
schema.default_logger
|
144
170
|
end
|
145
171
|
end
|
146
172
|
|
@@ -150,11 +176,16 @@ module GraphQL
|
|
150
176
|
end
|
151
177
|
|
152
178
|
def interpreter?
|
153
|
-
|
179
|
+
true
|
154
180
|
end
|
155
181
|
|
156
182
|
attr_accessor :multiplex
|
157
183
|
|
184
|
+
# @return [GraphQL::Tracing::Trace]
|
185
|
+
def current_trace
|
186
|
+
@current_trace ||= context[:trace] || (multiplex ? multiplex.current_trace : schema.new_trace(multiplex: multiplex, query: self))
|
187
|
+
end
|
188
|
+
|
158
189
|
def subscription_update?
|
159
190
|
@subscription_topic && subscription?
|
160
191
|
end
|
@@ -165,7 +196,6 @@ module GraphQL
|
|
165
196
|
@lookahead ||= begin
|
166
197
|
ast_node = selected_operation
|
167
198
|
root_type = warden.root_type_for_operation(ast_node.operation_type || "query")
|
168
|
-
root_type = root_type.type_class || raise("Invariant: `lookahead` only works with class-based types")
|
169
199
|
GraphQL::Execution::Lookahead.new(query: self, root_type: root_type, ast_nodes: [ast_node])
|
170
200
|
end
|
171
201
|
end
|
@@ -195,7 +225,7 @@ module GraphQL
|
|
195
225
|
# @return [Hash] A GraphQL response, with `"data"` and/or `"errors"` keys
|
196
226
|
def result
|
197
227
|
if !@executed
|
198
|
-
Execution::
|
228
|
+
Execution::Interpreter.run_all(@schema, [self], context: @context)
|
199
229
|
end
|
200
230
|
@result ||= Query::Result.new(query: self, values: @result_values)
|
201
231
|
end
|
@@ -233,35 +263,17 @@ module GraphQL
|
|
233
263
|
end
|
234
264
|
end
|
235
265
|
|
236
|
-
def irep_selection
|
237
|
-
@selection ||= begin
|
238
|
-
if selected_operation && internal_representation
|
239
|
-
internal_representation.operation_definitions[selected_operation.name]
|
240
|
-
else
|
241
|
-
nil
|
242
|
-
end
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
266
|
# Node-level cache for calculating arguments. Used during execution and query analysis.
|
247
267
|
# @param ast_node [GraphQL::Language::Nodes::AbstractNode]
|
248
268
|
# @param definition [GraphQL::Schema::Field]
|
249
269
|
# @param parent_object [GraphQL::Schema::Object]
|
250
270
|
# @return Hash{Symbol => Object}
|
251
271
|
def arguments_for(ast_node, definition, parent_object: nil)
|
252
|
-
|
253
|
-
arguments_cache.fetch(ast_node, definition, parent_object)
|
254
|
-
else
|
255
|
-
arguments_cache[ast_node][definition]
|
256
|
-
end
|
272
|
+
arguments_cache.fetch(ast_node, definition, parent_object)
|
257
273
|
end
|
258
274
|
|
259
275
|
def arguments_cache
|
260
|
-
|
261
|
-
@arguments_cache ||= Execution::Interpreter::ArgumentsCache.new(self)
|
262
|
-
else
|
263
|
-
@arguments_cache ||= ArgumentsCache.build(self)
|
264
|
-
end
|
276
|
+
@arguments_cache ||= Execution::Interpreter::ArgumentsCache.new(self)
|
265
277
|
end
|
266
278
|
|
267
279
|
# A version of the given query string, with:
|
@@ -270,7 +282,7 @@ module GraphQL
|
|
270
282
|
# @return [String, nil] Returns nil if the query is invalid.
|
271
283
|
def sanitized_query_string(inline_variables: true)
|
272
284
|
with_prepared_ast {
|
273
|
-
|
285
|
+
schema.sanitized_printer.new(self, inline_variables: inline_variables).sanitized_query_string
|
274
286
|
}
|
275
287
|
end
|
276
288
|
|
@@ -304,8 +316,8 @@ module GraphQL
|
|
304
316
|
with_prepared_ast { @validation_pipeline }
|
305
317
|
end
|
306
318
|
|
307
|
-
def_delegators :validation_pipeline, :validation_errors,
|
308
|
-
:analyzers, :ast_analyzers, :max_depth, :max_complexity
|
319
|
+
def_delegators :validation_pipeline, :validation_errors,
|
320
|
+
:analyzers, :ast_analyzers, :max_depth, :max_complexity, :validate_timeout_remaining
|
309
321
|
|
310
322
|
attr_accessor :analysis_errors
|
311
323
|
def valid?
|
@@ -322,8 +334,8 @@ module GraphQL
|
|
322
334
|
# @param value [Object] Any runtime value
|
323
335
|
# @return [GraphQL::ObjectType, nil] The runtime type of `value` from {Schema#resolve_type}
|
324
336
|
# @see {#possible_types} to apply filtering from `only` / `except`
|
325
|
-
def resolve_type(abstract_type, value =
|
326
|
-
if value.is_a?(Symbol) && value ==
|
337
|
+
def resolve_type(abstract_type, value = NOT_CONFIGURED)
|
338
|
+
if value.is_a?(Symbol) && value == NOT_CONFIGURED
|
327
339
|
# Old method signature
|
328
340
|
value = abstract_type
|
329
341
|
abstract_type = nil
|
@@ -342,27 +354,29 @@ module GraphQL
|
|
342
354
|
with_prepared_ast { @query }
|
343
355
|
end
|
344
356
|
|
345
|
-
# @return [void]
|
346
|
-
def merge_filters(only: nil, except: nil)
|
347
|
-
if @prepared_ast
|
348
|
-
raise "Can't add filters after preparing the query"
|
349
|
-
else
|
350
|
-
@filter = @filter.merge(only: only, except: except)
|
351
|
-
end
|
352
|
-
nil
|
353
|
-
end
|
354
|
-
|
355
357
|
def subscription?
|
356
358
|
with_prepared_ast { @subscription }
|
357
359
|
end
|
358
360
|
|
359
361
|
# @api private
|
360
|
-
def
|
361
|
-
schema.
|
362
|
-
|
362
|
+
def handle_or_reraise(err)
|
363
|
+
schema.handle_or_reraise(context, err)
|
364
|
+
end
|
365
|
+
|
366
|
+
def after_lazy(value, &block)
|
367
|
+
if !defined?(@runtime_instance)
|
368
|
+
@runtime_instance = context.namespace(:interpreter_runtime)[:runtime]
|
369
|
+
end
|
370
|
+
|
371
|
+
if @runtime_instance
|
372
|
+
@runtime_instance.minimal_after_lazy(value, &block)
|
373
|
+
else
|
374
|
+
@schema.after_lazy(value, &block)
|
363
375
|
end
|
364
376
|
end
|
365
377
|
|
378
|
+
attr_reader :logger
|
379
|
+
|
366
380
|
private
|
367
381
|
|
368
382
|
def find_operation(operations, operation_name)
|
@@ -377,11 +391,11 @@ module GraphQL
|
|
377
391
|
|
378
392
|
def prepare_ast
|
379
393
|
@prepared_ast = true
|
380
|
-
@warden ||=
|
394
|
+
@warden ||= @schema.warden_class.new(schema: @schema, context: @context)
|
381
395
|
parse_error = nil
|
382
396
|
@document ||= begin
|
383
397
|
if query_string
|
384
|
-
GraphQL.parse(query_string,
|
398
|
+
GraphQL.parse(query_string, trace: self.current_trace)
|
385
399
|
end
|
386
400
|
rescue GraphQL::ParseError => err
|
387
401
|
parse_error = err
|
@@ -430,7 +444,6 @@ module GraphQL
|
|
430
444
|
|
431
445
|
@validation_pipeline = GraphQL::Query::ValidationPipeline.new(
|
432
446
|
query: self,
|
433
|
-
validate: @validate,
|
434
447
|
parse_error: parse_error,
|
435
448
|
operation_name_error: operation_name_error,
|
436
449
|
max_depth: @max_depth,
|
data/lib/graphql/railtie.rb
CHANGED
@@ -2,115 +2,14 @@
|
|
2
2
|
|
3
3
|
module GraphQL
|
4
4
|
class Railtie < Rails::Railtie
|
5
|
-
config.
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
if
|
10
|
-
Language::Parser.cache ||= Language::Cache.new(
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
rake_tasks do
|
15
|
-
# Defer this so that you only need the `parser` gem when you _run_ the upgrader
|
16
|
-
def load_upgraders
|
17
|
-
require_relative './upgrader/member'
|
18
|
-
require_relative './upgrader/schema'
|
19
|
-
end
|
20
|
-
|
21
|
-
namespace :graphql do
|
22
|
-
task :upgrade, [:dir] do |t, args|
|
23
|
-
unless (dir = args[:dir])
|
24
|
-
fail 'You have to give me a directory where your GraphQL schema and types live. ' \
|
25
|
-
'For example: `bin/rake graphql:upgrade[app/graphql/**/*]`'
|
26
|
-
end
|
27
|
-
|
28
|
-
Dir[dir].each do |file|
|
29
|
-
# Members (types, interfaces, etc.)
|
30
|
-
if file =~ /.*_(type|interface|enum|union|)\.rb$/
|
31
|
-
Rake::Task["graphql:upgrade:member"].execute(Struct.new(:member_file).new(file))
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
puts "Upgrade complete! Note that this is a best-effort approach, and may very well contain some bugs."
|
36
|
-
puts "Don't forget to create the base objects. For example, you could run:"
|
37
|
-
puts "\tbin/rake graphql:upgrade:create_base_objects[app/graphql]"
|
38
|
-
end
|
39
|
-
|
40
|
-
namespace :upgrade do
|
41
|
-
task :create_base_objects, [:base_dir] do |t, args|
|
42
|
-
unless (base_dir = args[:base_dir])
|
43
|
-
fail 'You have to give me a directory where your GraphQL types live. ' \
|
44
|
-
'For example: `bin/rake graphql:upgrade:create_base_objects[app/graphql]`'
|
45
|
-
end
|
46
|
-
|
47
|
-
destination_file = File.join(base_dir, "types", "base_scalar.rb")
|
48
|
-
unless File.exists?(destination_file)
|
49
|
-
FileUtils.mkdir_p(File.dirname(destination_file))
|
50
|
-
File.open(destination_file, 'w') do |f|
|
51
|
-
f.puts "class Types::BaseScalar < GraphQL::Schema::Scalar\nend"
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
destination_file = File.join(base_dir, "types", "base_input_object.rb")
|
56
|
-
unless File.exists?(destination_file)
|
57
|
-
FileUtils.mkdir_p(File.dirname(destination_file))
|
58
|
-
File.open(destination_file, 'w') do |f|
|
59
|
-
f.puts "class Types::BaseInputObject < GraphQL::Schema::InputObject\nend"
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
destination_file = File.join(base_dir, "types", "base_enum.rb")
|
64
|
-
unless File.exists?(destination_file)
|
65
|
-
FileUtils.mkdir_p(File.dirname(destination_file))
|
66
|
-
File.open(destination_file, 'w') do |f|
|
67
|
-
f.puts "class Types::BaseEnum < GraphQL::Schema::Enum\nend"
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
destination_file = File.join(base_dir, "types", "base_union.rb")
|
72
|
-
unless File.exists?(destination_file)
|
73
|
-
FileUtils.mkdir_p(File.dirname(destination_file))
|
74
|
-
File.open(destination_file, 'w') do |f|
|
75
|
-
f.puts "class Types::BaseUnion < GraphQL::Schema::Union\nend"
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
destination_file = File.join(base_dir, "types", "base_interface.rb")
|
80
|
-
unless File.exists?(destination_file)
|
81
|
-
FileUtils.mkdir_p(File.dirname(destination_file))
|
82
|
-
File.open(destination_file, 'w') do |f|
|
83
|
-
f.puts "module Types::BaseInterface\n include GraphQL::Schema::Interface\nend"
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
destination_file = File.join(base_dir, "types", "base_object.rb")
|
88
|
-
unless File.exists?(destination_file)
|
89
|
-
File.open(destination_file, 'w') do |f|
|
90
|
-
f.puts "class Types::BaseObject < GraphQL::Schema::Object\nend"
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
task :schema, [:schema_file] do |t, args|
|
96
|
-
schema_file = args.schema_file
|
97
|
-
load_upgraders
|
98
|
-
upgrader = GraphQL::Upgrader::Schema.new File.read(schema_file)
|
99
|
-
|
100
|
-
puts "- Transforming schema #{schema_file}"
|
101
|
-
File.open(schema_file, 'w') { |f| f.write upgrader.upgrade }
|
102
|
-
end
|
103
|
-
|
104
|
-
task :member, [:member_file] do |t, args|
|
105
|
-
member_file = args.member_file
|
106
|
-
load_upgraders
|
107
|
-
upgrader = GraphQL::Upgrader::Member.new File.read(member_file)
|
108
|
-
next unless upgrader.upgradeable?
|
109
|
-
|
110
|
-
puts "- Transforming member #{member_file}"
|
111
|
-
File.open(member_file, 'w') { |f| f.write upgrader.upgrade }
|
112
|
-
end
|
113
|
-
end
|
5
|
+
config.graphql = ActiveSupport::OrderedOptions.new
|
6
|
+
config.graphql.parser_cache = false
|
7
|
+
|
8
|
+
initializer("graphql.cache") do |app|
|
9
|
+
if config.graphql.parser_cache
|
10
|
+
Language::Parser.cache ||= Language::Cache.new(
|
11
|
+
app.root.join("tmp/cache/graphql")
|
12
|
+
)
|
114
13
|
end
|
115
14
|
end
|
116
15
|
end
|
@@ -15,7 +15,7 @@ module GraphQL
|
|
15
15
|
puts "Validating graphql-pro v#{version}"
|
16
16
|
puts " - Checking for graphql-pro credentials..."
|
17
17
|
|
18
|
-
creds = `bundle config gems.graphql.pro`[/[a-z0-9]{11}:[a-z0-9]{11}/]
|
18
|
+
creds = `bundle config gems.graphql.pro --parseable`[/[a-z0-9]{11}:[a-z0-9]{11}/]
|
19
19
|
if creds.nil?
|
20
20
|
puts " #{ex} failed, please set with `bundle config gems.graphql.pro $MY_CREDENTIALS`"
|
21
21
|
exit(1)
|
data/lib/graphql/rake_task.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require "fileutils"
|
3
|
+
require "rake"
|
3
4
|
require "graphql/rake_task/validate"
|
4
5
|
|
5
6
|
module GraphQL
|
@@ -8,8 +9,7 @@ module GraphQL
|
|
8
9
|
# By default, schemas are looked up by name as constants using `schema_name:`.
|
9
10
|
# You can provide a `load_schema` function to return your schema another way.
|
10
11
|
#
|
11
|
-
# `load_context
|
12
|
-
# you can keep an eye on how filters affect your schema.
|
12
|
+
# Use `load_context:` and `visible?` to dump schemas under certain visibility constraints.
|
13
13
|
#
|
14
14
|
# @example Dump a Schema to .graphql + .json files
|
15
15
|
# require "graphql/rake_task"
|
@@ -22,6 +22,10 @@ module GraphQL
|
|
22
22
|
# @example Invoking the task from Ruby
|
23
23
|
# require "rake"
|
24
24
|
# Rake::Task["graphql:schema:dump"].invoke
|
25
|
+
#
|
26
|
+
# @example Providing arguments to build the introspection query
|
27
|
+
# require "graphql/rake_task"
|
28
|
+
# GraphQL::RakeTask.new(schema_name: "MySchema", include_is_one_of: true)
|
25
29
|
class RakeTask
|
26
30
|
include Rake::DSL
|
27
31
|
|
@@ -31,11 +35,14 @@ module GraphQL
|
|
31
35
|
schema_name: nil,
|
32
36
|
load_schema: ->(task) { Object.const_get(task.schema_name) },
|
33
37
|
load_context: ->(task) { {} },
|
34
|
-
only: nil,
|
35
|
-
except: nil,
|
36
38
|
directory: ".",
|
37
39
|
idl_outfile: "schema.graphql",
|
38
40
|
json_outfile: "schema.json",
|
41
|
+
include_deprecated_args: true,
|
42
|
+
include_schema_description: false,
|
43
|
+
include_is_repeatable: false,
|
44
|
+
include_specified_by_url: false,
|
45
|
+
include_is_one_of: false
|
39
46
|
}
|
40
47
|
|
41
48
|
# @return [String] Namespace for generated tasks
|
@@ -58,12 +65,6 @@ module GraphQL
|
|
58
65
|
# @return [<#call(task)>] A callable for loading the query context
|
59
66
|
attr_accessor :load_context
|
60
67
|
|
61
|
-
# @return [<#call(member, ctx)>, nil] A filter for this task
|
62
|
-
attr_accessor :only
|
63
|
-
|
64
|
-
# @return [<#call(member, ctx)>, nil] A filter for this task
|
65
|
-
attr_accessor :except
|
66
|
-
|
67
68
|
# @return [String] target for IDL task
|
68
69
|
attr_accessor :idl_outfile
|
69
70
|
|
@@ -73,6 +74,10 @@ module GraphQL
|
|
73
74
|
# @return [String] directory for IDL & JSON files
|
74
75
|
attr_accessor :directory
|
75
76
|
|
77
|
+
# @return [Boolean] Options for additional fields in the introspection query JSON response
|
78
|
+
# @see GraphQL::Schema.as_json
|
79
|
+
attr_accessor :include_deprecated_args, :include_schema_description, :include_is_repeatable, :include_specified_by_url, :include_is_one_of
|
80
|
+
|
76
81
|
# Set the parameters of this task by passing keyword arguments
|
77
82
|
# or assigning attributes inside the block
|
78
83
|
def initialize(options = {})
|
@@ -95,7 +100,21 @@ module GraphQL
|
|
95
100
|
def write_outfile(method_name, file)
|
96
101
|
schema = @load_schema.call(self)
|
97
102
|
context = @load_context.call(self)
|
98
|
-
result =
|
103
|
+
result = case method_name
|
104
|
+
when :to_json
|
105
|
+
schema.to_json(
|
106
|
+
include_is_one_of: include_is_one_of,
|
107
|
+
include_deprecated_args: include_deprecated_args,
|
108
|
+
include_is_repeatable: include_is_repeatable,
|
109
|
+
include_specified_by_url: include_specified_by_url,
|
110
|
+
include_schema_description: include_schema_description,
|
111
|
+
context: context
|
112
|
+
)
|
113
|
+
when :to_definition
|
114
|
+
schema.to_definition(context: context)
|
115
|
+
else
|
116
|
+
raise ArgumentError, "Unexpected schema dump method: #{method_name.inspect}"
|
117
|
+
end
|
99
118
|
dir = File.dirname(file)
|
100
119
|
FileUtils.mkdir_p(dir)
|
101
120
|
if !result.end_with?("\n")
|
@@ -31,25 +31,18 @@ module GraphQL
|
|
31
31
|
|
32
32
|
# @param collection [Object] The list of items to wrap in a connection
|
33
33
|
# @param item [Object] The newly-added item (will be wrapped in `edge_class`)
|
34
|
+
# @param context [GraphQL::Query::Context] The surrounding `ctx`, will be passed to the connection
|
34
35
|
# @param parent [Object] The owner of `collection`, will be passed to the connection if provided
|
35
|
-
# @param context [GraphQL::Query::Context] The surrounding `ctx`, will be passed to the connection if provided (this is required for cursor encoders)
|
36
36
|
# @param edge_class [Class] The class to wrap `item` with (defaults to the connection's edge class)
|
37
|
-
def initialize(collection:, item:, parent: nil,
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
@
|
44
|
-
@connection.range_add_edge(item)
|
45
|
-
else
|
46
|
-
@connection.edge_class.new(item, @connection)
|
47
|
-
end
|
37
|
+
def initialize(collection:, item:, context:, parent: nil, edge_class: nil)
|
38
|
+
conn_class = context.schema.connections.wrapper_for(collection)
|
39
|
+
# The rest will be added by ConnectionExtension
|
40
|
+
@connection = conn_class.new(collection, parent: parent, context: context, edge_class: edge_class)
|
41
|
+
# Check if this connection supports it, to support old versions of GraphQL-Pro
|
42
|
+
@edge = if @connection.respond_to?(:range_add_edge)
|
43
|
+
@connection.range_add_edge(item)
|
48
44
|
else
|
49
|
-
|
50
|
-
@connection = connection_class.new(collection, {}, parent: parent, context: context)
|
51
|
-
edge_class ||= Relay::Edge
|
52
|
-
@edge = edge_class.new(item, @connection)
|
45
|
+
@connection.edge_class.new(item, @connection)
|
53
46
|
end
|
54
47
|
|
55
48
|
@parent = parent
|
data/lib/graphql/relay.rb
CHANGED
@@ -1,18 +1,3 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'graphql/relay/page_info'
|
4
|
-
require 'graphql/relay/edge'
|
5
|
-
require 'graphql/relay/edge_type'
|
6
|
-
require 'graphql/relay/edges_instrumentation'
|
7
|
-
require 'graphql/relay/base_connection'
|
8
|
-
require 'graphql/relay/array_connection'
|
9
3
|
require 'graphql/relay/range_add'
|
10
|
-
require 'graphql/relay/relation_connection'
|
11
|
-
require 'graphql/relay/mongo_relation_connection'
|
12
|
-
require 'graphql/relay/global_id_resolve'
|
13
|
-
require 'graphql/relay/mutation'
|
14
|
-
require 'graphql/relay/node'
|
15
|
-
require 'graphql/relay/connection_instrumentation'
|
16
|
-
require 'graphql/relay/connection_resolve'
|
17
|
-
require 'graphql/relay/connection_type'
|
18
|
-
require 'graphql/relay/type_extensions'
|