Packages
absinthe
1.2.0-alpha0
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
Current section
Files
Jump to
Current section
Files
lib/absinthe/phase/document/arguments/normalize.ex
defmodule Absinthe.Phase.Document.Arguments.Normalize do
@moduledoc """
Populate all arguments in the document with their provided values:
- If a literal value is provided for an argument, set the `Argument.t`'s
`normalized_value` field to that value.
- If a variable is provided for an argument, set the `Argument.t`'s
`normalized_value` to the reconciled value for the variable
(Note: this requires the `Phase.Document.Variables` phase as a
prerequisite).
Note that no validation occurs in this phase.
"""
use Absinthe.Phase
alias Absinthe.Blueprint
@spec run(Blueprint.t, Keyword.t) :: {:ok, Blueprint.t}
def run(input, _options \\ []) do
acc = %{provided_values: %{}}
{node, _} = Blueprint.prewalk(input, acc, &handle_node/2)
{:ok, node}
end
@spec handle_node(Blueprint.node_t, map) :: {Blueprint.node_t, map}
defp handle_node(%Blueprint.Document.Operation{} = node, acc) do
{
node,
%{acc | provided_values: node.provided_values}
}
end
# Argument using a variable: Set provided value
defp handle_node(%Blueprint.Input.Argument{literal_value: %Blueprint.Input.Variable{name: variable_name}} = node, acc) do
{
%{node | normalized_value: Map.get(acc.provided_values, variable_name)},
acc
}
end
# Argument not using a variable: Set provided value from the literal value
defp handle_node(%Blueprint.Input.Argument{} = node, acc) do
{
%{node | normalized_value: node.literal_value},
acc
}
end
defp handle_node(node, acc) do
{node, acc}
end
end