Packages
absinthe
1.7.9
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/type/directive.ex
defmodule Absinthe.Type.Directive do
@moduledoc """
Used by the GraphQL runtime as a way of modifying execution
behavior.
Type system creators will usually not create these directly.
"""
alias Absinthe.Type
alias Absinthe.Language
@typedoc """
A defined directive.
* `:name` - The name of the directive. Should be a lowercase `binary`. Set automatically.
* `:description` - A nice description for introspection.
* `:args` - A map of `Absinthe.Type.Argument` structs. See `Absinthe.Schema.Notation.arg/2`.
* `:locations` - A list of places the directives can be used.
* `:repeatable` - A directive may be defined as repeatable by including the “repeatable” keyword
The `:__reference__` key is for internal use.
"""
@type t :: %{
name: binary,
description: binary,
identifier: atom,
args: map,
locations: [location],
expand: (map, Absinthe.Blueprint.node_t() -> atom),
definition: module,
repeatable: boolean,
__private__: Keyword.t(),
__reference__: Type.Reference.t()
}
@type location ::
:query | :mutation | :field | :fragment_definition | :fragment_spread | :inline_fragment
defstruct name: nil,
description: nil,
identifier: nil,
args: nil,
locations: [],
expand: nil,
definition: nil,
repeatable: false,
__private__: [],
__reference__: nil
@doc false
defdelegate functions, to: Absinthe.Blueprint.Schema.DirectiveDefinition
# Whether the directive is active in `place`
@doc false
@spec on?(t, Language.t()) :: boolean
def on?(%{locations: locations}, place) do
Enum.any?(locations, &do_on?(&1, place))
end
# Operations
defp do_on?(location, %Language.OperationDefinition{operation: location}), do: true
defp do_on?(:field, %Language.Field{}), do: true
defp do_on?(:fragment_definition, %Language.Fragment{}), do: true
defp do_on?(:fragment_spread, %Language.FragmentSpread{}), do: true
defp do_on?(:inline_fragment, %Language.InlineFragment{}), do: true
defp do_on?(:schema, %Language.SchemaDefinition{}), do: true
defp do_on?(:schema, %Language.SchemaDeclaration{}), do: true
defp do_on?(:scalar, %Language.ScalarTypeDefinition{}), do: true
defp do_on?(:object, %Language.ObjectTypeDefinition{}), do: true
defp do_on?(:field_definition, %Language.FieldDefinition{}), do: true
defp do_on?(:interface, %Language.InterfaceTypeDefinition{}), do: true
defp do_on?(:union, %Language.UnionTypeDefinition{}), do: true
defp do_on?(:enum, %Language.EnumTypeDefinition{}), do: true
defp do_on?(:enum_value, %Language.EnumValueDefinition{}), do: true
defp do_on?(:input_object, %Language.InputObjectTypeDefinition{}), do: true
defp do_on?(:argument_definition, %Language.InputValueDefinition{}), do: true
defp do_on?(:input_field_definition, %Language.InputValueDefinition{}), do: true
defp do_on?(_, _), do: false
end