Skip to content

Commit 97ec561

Browse files
Ensure root objects are marked as referenced correctly
Followup to absinthe-graphql#1176 Since every schema will have a declared or inferred declaration, this can be used to mark root objects as referenced. The MarkReferenced used to mark every :query/:subscription/:mutation object as referenced, even when it was used in the declaration. This fix ensures that root objects that are not used in the declaration are not marked as referenced and thus not rendered in the SDL.
1 parent c3c60e5 commit 97ec561

File tree

2 files changed

+8
-9
lines changed

2 files changed

+8
-9
lines changed

lib/absinthe/phase/schema/mark_referenced.ex

+8-5
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,16 @@ defmodule Absinthe.Phase.Schema.MarkReferenced do
99
%{schema_definitions: [schema]} = blueprint
1010

1111
schema =
12-
Map.update!(schema, :type_definitions, &mark_referenced(&1, schema.directive_definitions))
12+
Map.update!(
13+
schema,
14+
:type_definitions,
15+
&mark_referenced(&1, schema.directive_definitions, schema.schema_declaration)
16+
)
1317

1418
{:ok, %{blueprint | schema_definitions: [schema]}}
1519
end
1620

17-
@roots [:query, :mutation, :subscription]
18-
defp mark_referenced(type_defs, directive_defs) do
21+
defp mark_referenced(type_defs, directive_defs, schema_declaration) do
1922
types_by_ref =
2023
Enum.reduce(type_defs, %{}, fn type_def, acc ->
2124
acc
@@ -24,8 +27,8 @@ defmodule Absinthe.Phase.Schema.MarkReferenced do
2427
end)
2528

2629
referenced_type_ids =
27-
@roots
28-
|> Enum.map(&Map.get(types_by_ref, &1))
30+
schema_declaration.field_definitions
31+
|> Enum.map(&Map.get(types_by_ref, &1.identifier))
2932
|> Enum.reject(&is_nil/1)
3033
|> Enum.concat(directive_defs)
3134
|> Enum.reduce(MapSet.new(), &referenced_types(&1, types_by_ref, &2))

test/absinthe/schema_test.exs

-4
Original file line numberDiff line numberDiff line change
@@ -328,10 +328,6 @@ defmodule Absinthe.SchemaTest do
328328
name: String
329329
}
330330
331-
type MyRootMutation {
332-
name: String
333-
}
334-
335331
type RootQueryType {
336332
name(familyName: Boolean): String
337333
}

0 commit comments

Comments
 (0)