Packages
absinthe
1.6.2
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/language/document.ex
defmodule Absinthe.Language.Document do
@moduledoc false
alias Absinthe.{Blueprint, Language}
defstruct definitions: [],
loc: %{line: nil}
@typedoc false
@type t :: %__MODULE__{
definitions: [Absinthe.Language.t()],
loc: Language.loc_t()
}
@doc "Extract a named operation definition from a document"
@spec get_operation(t, String.t()) :: nil | Absinthe.Language.OperationDefinition.t()
def get_operation(%{definitions: definitions}, name) do
definitions
|> Enum.find(nil, fn
%Language.OperationDefinition{name: ^name} ->
true
_ ->
false
end)
end
@doc false
@spec fragments_by_name(Absinthe.Language.Document.t()) :: %{
String.t() => Absinthe.Language.Fragment.t()
}
def fragments_by_name(%{definitions: definitions}) do
definitions
|> Enum.reduce(%{}, fn statement, memo ->
case statement do
%Absinthe.Language.Fragment{} ->
memo |> Map.put(statement.name, statement)
_ ->
memo
end
end)
end
defimpl Blueprint.Draft do
@operations [
Language.OperationDefinition
]
@types [
Language.SchemaDefinition,
Language.EnumTypeDefinition,
Language.InputObjectTypeDefinition,
Language.InputValueDefinition,
Language.InterfaceTypeDefinition,
Language.ObjectTypeDefinition,
Language.ScalarTypeDefinition,
Language.UnionTypeDefinition
]
@directives [
Language.DirectiveDefinition
]
@fragments [
Language.Fragment
]
def convert(node, bp) do
Enum.reduce(node.definitions, bp, &convert_definition(&1, node, &2))
end
defp convert_definition(%struct{} = node, doc, blueprint) when struct in @operations do
update_in(blueprint.operations, &[Blueprint.Draft.convert(node, doc) | &1])
end
defp convert_definition(%struct{} = node, doc, blueprint) when struct in @types do
update_in(blueprint.schema_definitions, &[Blueprint.Draft.convert(node, doc) | &1])
end
defp convert_definition(%struct{} = node, doc, blueprint) when struct in @directives do
update_in(blueprint.directives, &[Blueprint.Draft.convert(node, doc) | &1])
end
defp convert_definition(%struct{} = node, doc, blueprint) when struct in @fragments do
update_in(blueprint.fragments, &[Blueprint.Draft.convert(node, doc) | &1])
end
end
end