Packages
absinthe
1.6.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/blueprint/document/operation.ex
defmodule Absinthe.Blueprint.Document.Operation do
@moduledoc false
alias Absinthe.Blueprint
@enforce_keys [:name, :type]
defstruct [
:name,
:type,
current: false,
selections: [],
directives: [],
variable_definitions: [],
variable_uses: [],
fragment_uses: [],
source_location: nil,
# Populated by phases
flags: %{},
schema_node: nil,
complexity: nil,
provided_values: %{},
errors: []
]
@type t :: %__MODULE__{
name: nil | String.t(),
type: :query | :mutation | :subscription,
current: boolean,
directives: [Blueprint.Directive.t()],
selections: [Blueprint.Document.selection_t()],
variable_definitions: [Blueprint.Document.VariableDefinition.t()],
variable_uses: [Blueprint.Input.Variable.Use.t()],
fragment_uses: [Blueprint.Document.Fragment.Named.Use.t()],
source_location: nil | Blueprint.SourceLocation.t(),
schema_node: nil | Absinthe.Type.Object.t(),
complexity: nil | non_neg_integer,
provided_values: %{String.t() => nil | Blueprint.Input.t()},
flags: Blueprint.flags_t(),
errors: [Absinthe.Phase.Error.t()]
}
@doc """
Determine if a fragment or variable is used by an operation.
"""
@spec uses?(t, Blueprint.node_t()) :: boolean
def uses?(op, %Blueprint.Document.Fragment.Named{} = node) do
do_uses?(op.fragment_uses, node)
end
def uses?(op, %Blueprint.Input.Variable{} = node) do
do_uses?(op.variable_uses, node)
end
# Whether a node is marked as used in a use list
@spec do_uses?([Blueprint.use_t()], Blueprint.node_t()) :: boolean
defp do_uses?(list, node) do
Enum.find(list, &(&1.name == node.name))
end
end