Absinthe.Plug.DocumentProvider.Compiled (absinthe_plug v1.5.9) View Source
Provide pre-compiled documents for retrieval by request parameter key.
Important: This module shouldn't be used as a document provider itself, but as a toolkit to build one. See the examples below.
Examples
Define a new module and use Absinthe.Plug.DocumentProvider.Compiled:
defmodule MyAppWeb.Schema.Documents do
use Absinthe.Plug.DocumentProvider.Compiled
# ... Configure here
endYou can provide documents as literals within the module, by key, using the
provide/2 macro:
provide "item", "query Item($id: ID!) { item(id: $id) { name } }"You can also load a map of key value pairs using provide/1.
provide %{
"item" => "query Item($id: ID!) { item(id: $id) { name } }",
"time" => "{ currentTime }"
}This can be used to support loading documents extracted using Apollo's persistgraphql tool by parsing the file and inverting the key/value pairs.
provide File.read!("/path/to/extracted_queries.json")
|> Jason.decode!
|> Map.new(fn {k, v} -> {v, k} end)By default, the request parameter that will be used to lookup documents is
"id". You can change this by passing a :key_param option to use, e.g.:
use Absinthe.Plug.DocumentProvider.Compiled, key_param: "lookup_key"Configuring
You need to configure Absinthe.Plug to use any document providers that you create.
(Only Absinthe.Plug.DocumentProviders.Default is configured by default.)
Make sure that a Compiled document provider is placed before the Default provider.
See the documentation on Absinthe.Plug.init/1 for more details. Look for the
:document_providers option.
Link to this section Summary
Functions
Lookup a document by id.
Provide multiple GraphQL documents by key.
Provide a GraphQL document for a given key.
Link to this section Functions
Specs
get(module(), String.t(), :compiled | :source) :: nil | Absinthe.Blueprint.t()
Lookup a document by id.
Examples
Get a compiled document:
iex> get(CompiledProvider, "provided")
#Absinthe.Blueprint<>With an explicit :compiled flag:
iex> get(CompiledProvider, "provided", :compiled)
#Absinthe.Blueprint<>Get the source:
iex> get(CompiledProvider, "provided", :source)
"query Item { item { name } }"When a value isn't present:
iex> get(CompiledProvider, "not-provided")
nil
Specs
Provide multiple GraphQL documents by key.
Note that keys will be coerced to strings to ensure compatibility with the expected request parameter.
For more information, see the module-level documentation.
Examples
provide %{
"item" => "query Item($id: ID!) { item(id: $id) { name } }",
"time" => "{ currentTime }"
}
Specs
Provide a GraphQL document for a given key.
Note that the key will be coerced to a string to ensure compatibility with the expected request parameter.
For more information, see the module-level documentation.
Examples
provide "foo", """
query ShowItem($id: ID!) {
item(id: $id) { name }
}
"""