Packages
absinthe
1.9.1
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/utils/render.ex
defmodule Absinthe.Utils.Render do
@moduledoc false
import Inspect.Algebra
def multiline(docs, true) do
force_unfit(docs)
end
def multiline(docs, false) do
docs
end
def join(docs, joiner) do
fold_doc(docs, fn doc, acc ->
concat([doc, concat(List.wrap(joiner)), acc])
end)
end
def render_string_value(string, indent \\ 2) do
string
|> String.trim()
|> String.split("\n")
|> case do
[string_line] ->
concat([~s("), escape_string(string_line), ~s(")])
string_lines ->
concat(
nest(
block_string([~s(""")] ++ string_lines),
indent,
:always
),
concat(line(), ~s("""))
)
end
end
@escaped_chars [?", ?\\, ?/, ?\b, ?\f, ?\n, ?\r, ?\t]
defp escape_string(string) do
escape_string(string, [])
end
defp escape_string(<<char, rest::binary>>, acc) when char in @escaped_chars do
escape_string(rest, [acc | escape_char(char)])
end
defp escape_string(<<char::utf8, rest::binary>>, acc) do
escape_string(rest, acc ++ [<<char::utf8>>])
end
defp escape_string(<<>>, acc) do
to_string(acc)
end
defp escape_char(?"), do: [?\\, ?"]
defp escape_char(?\\), do: [?\\, ?\\]
defp escape_char(?/), do: [?\\, ?/]
defp escape_char(?\b), do: [?\\, ?b]
defp escape_char(?\f), do: [?\\, ?f]
defp escape_char(?\n), do: [?\\, ?n]
defp escape_char(?\r), do: [?\\, ?r]
defp escape_char(?\t), do: [?\\, ?t]
defp block_string([string]) do
string(string)
end
defp block_string([string | rest]) do
string
|> string()
|> concat(block_string_line(rest))
|> concat(block_string(rest))
end
defp block_string_line(["", _ | _]), do: nest(line(), :reset)
defp block_string_line(_), do: line()
end