Packages
absinthe
1.2.0
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/document/arguments/flag_invalid.ex
defmodule Absinthe.Phase.Document.Arguments.FlagInvalid do
@moduledoc false
# Marks arguments as bad if they have any invalid children.
#
# This is later used by the ArgumentsOfCorrectType phase.
alias Absinthe.{Blueprint, Phase}
use Absinthe.Phase
@doc """
Run this validation.
"""
@spec run(Blueprint.t, Keyword.t) :: Phase.result_t
def run(input, _options \\ []) do
result = Blueprint.postwalk(input, &handle_node/1)
{:ok, result}
end
defp handle_node(%{schema_node: nil, flags: %{}} = node) do
node |> flag_invalid(:extra)
end
defp handle_node(%Blueprint.Input.Argument{} = node) do
check_children(node, node.input_value.normalized, :bad_argument)
end
defp handle_node(%Blueprint.Input.Field{} = node) do
check_children(node, node.input_value.normalized, :bad_field)
end
defp handle_node(%Blueprint.Input.List{} = node) do
check_children(node, node.items |> Enum.map(&(&1.normalized)), :bad_list)
end
defp handle_node(%Blueprint.Input.Object{} = node) do
check_children(node, node.fields, :bad_object)
end
defp handle_node(node), do: node
defp check_children(node, children, flag) do
children
|> Blueprint.prewalk(true, fn
%{flags: %{invalid: _}} = child, _ ->
{:halt, child, false}
node, acc ->
{:halt, node, acc}
end)
|> case do
{_, true} -> node
{_, false} -> node |> flag_invalid(flag)
end
end
end