Packages
absinthe
1.7.1
1.11.0
1.10.2
1.10.1
1.10.0
1.9.1
1.9.0
1.8.0
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.8
1.6.7
retired
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.6.0-rc.1
1.6.0-rc.0
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.5.0-rc.5
1.5.0-rc.4
1.5.0-rc.3
1.5.0-rc.2
1.5.0-rc.1
1.5.0-rc.0
1.5.0-beta.2
1.5.0-beta.1
1.5.0-beta.0
1.5.0-alpha.4
1.5.0-alpha.3
1.5.0-alpha.2
1.5.0-alpha.1
1.5.0-alpha.0
1.4.16
1.4.15
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.4.9
1.4.8
retired
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.4.0-rc.3
1.4.0-rc.2
1.4.0-rc.1
1.4.0-rc.0
1.4.0-beta.5
1.4.0-beta.4
1.4.0-beta.3
1.4.0-beta.2
1.4.0-beta.1
1.3.2
1.3.1
1.3.0
1.3.0-rc.0
1.3.0-beta.2
1.3.0-beta.1
1.3.0-beta.0
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc.0
1.2.0-beta.0
1.2.0-alpha0
1.2.0-alpha.2
1.2.0-alpha.1
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.0
0.5.2
0.5.1
0.5.0
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.2.3
0.2.2
0.2.1
0.1.0
GraphQL for Elixir
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/absinthe/phase/schema/register_triggers.ex
defmodule Absinthe.Phase.Schema.RegisterTriggers do
@moduledoc false
use Absinthe.Phase
def run(blueprint, _opts) do
%{schema_definitions: [schema]} = blueprint
subscription_object =
Enum.find(schema.type_definitions, fn type ->
type.identifier == :subscription
end)
mutation_object =
Enum.find(schema.type_definitions, fn type ->
type.identifier == :mutation
end)
mutation_object =
if subscription_object && mutation_object do
mutation_object
|> register_triggers(subscription_object.fields)
|> setup_middleware
else
# TODO: return errors if there isn't a mutation field that is on the
# triggers list
mutation_object
end
schema =
Map.update!(schema, :type_definitions, fn definitions ->
Enum.map(definitions, fn
%{identifier: :subscription} -> subscription_object
%{identifier: :mutation} -> mutation_object
type -> type
end)
end)
{:ok, %{blueprint | schema_definitions: [schema]}}
end
defp register_triggers(mutation_object, sub_fields) do
update_fields(mutation_object, fn mut_field ->
triggers =
for sub_field <- sub_fields,
sub_triggers = Absinthe.Type.function(sub_field, :triggers),
is_map(sub_triggers),
Map.has_key?(sub_triggers, mut_field.identifier),
do: sub_field.identifier
%{mut_field | triggers: triggers}
end)
end
defp setup_middleware(mutation_object) do
update_fields(mutation_object, fn field ->
Map.update!(field, :middleware, &Absinthe.Subscription.add_middleware/1)
end)
end
defp update_fields(mutation_object, fun) do
Map.update!(mutation_object, :fields, fn fields ->
Enum.map(fields, fun)
end)
end
end