Packages
absinthe
1.4.8
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
Retired package: Release invalid
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_child(node, node.input_value.normalized, :bad_argument)
end
defp handle_node(%Blueprint.Input.Field{} = node) do
check_child(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_child(node, %{flags: %{invalid: _}}, flag) do
flag_invalid(node, flag)
end
defp check_child(node, _, _) do
node
end
defp check_children(node, children, flag) do
invalid? =
fn
%{flags: %{invalid: _}} -> true
_ -> false
end
if Enum.any?(children, invalid?) do
flag_invalid(node, flag)
else
node
end
end
end