From dcafcaa2d15aad579b2fb74e7064d8e317cd5573 Mon Sep 17 00:00:00 2001 From: Robert Mosolgo Date: Thu, 14 Nov 2024 15:02:22 -0500 Subject: [PATCH] Fix reachability compat --- lib/graphql/schema/visibility.rb | 16 +++++++++++----- lib/graphql/schema/visibility/profile.rb | 3 ++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/lib/graphql/schema/visibility.rb b/lib/graphql/schema/visibility.rb index cced07b8c7..e0c8d02977 100644 --- a/lib/graphql/schema/visibility.rb +++ b/lib/graphql/schema/visibility.rb @@ -70,7 +70,11 @@ def load_all @loaded_all ||= begin visit = Visibility::Visit.new(@schema) - visit.entry_point_types.each do |t| + @schema.root_types.each do |t| + @references[t] << true + end + + @schema.introspection_system.types.each_value do |t| @references[t] << true end @@ -107,10 +111,12 @@ def load_all true end @interface_type_memberships.each do |int_type, type_memberships| - referers = @references[int_type] - type_memberships.each do |type_membership| - implementor_type = type_membership.object_type - @references[implementor_type].concat(referers) + referers = @references[int_type].select { |r| r.is_a?(GraphQL::Schema::Field) } + if referers.any? + type_memberships.each do |type_membership| + implementor_type = type_membership.object_type + @references[implementor_type].concat(referers) + end end end diff --git a/lib/graphql/schema/visibility/profile.rb b/lib/graphql/schema/visibility/profile.rb index 1c5a3f5081..2a709ba356 100644 --- a/lib/graphql/schema/visibility/profile.rb +++ b/lib/graphql/schema/visibility/profile.rb @@ -243,6 +243,7 @@ def directives end def loadable?(t, _ctx) + load_all_types !@all_types[t.graphql_name] && @cached_visible[t] end @@ -304,7 +305,7 @@ def load_all_types end def referenced?(type_defn) - @schema.visibility.top_level.references[type_defn].any? { |ref_member| ref_member == true || @cached_visible[ref_member] } + @schema.visibility.top_level.references[type_defn].any? { |r| r == true || @cached_visible[r] } end def possible_types_for(type)