Packages
absinthe
1.4.0-beta.3
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
require Logger
alias Absinthe.{Blueprint, Language}
defstruct [
definitions: [],
loc: %{start_line: nil}
]
@typedoc false
@type t :: %__MODULE__{
definitions: [Absinthe.Traversal.Node.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.types, &[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
defimpl Absinthe.Traversal.Node do
def children(%{definitions: definitions}, _schema), do: definitions
end
end