Current section
Files
Jump to
Current section
Files
lib/ssr.ex
defmodule LiveVue.SSR.NotConfigured do
@moduledoc false
defexception [:message]
end
defmodule LiveVue.SSR do
require Logger
@moduledoc """
A behaviour for rendering Vue components server-side.
To define a custom renderer, change the application config in `config.exs`:
config :live_vue, ssr_module: MyCustomSSRModule
Exposes a telemetry span for each render under key `[:live_vue, :ssr]`
"""
@type component_name :: String.t()
@type props :: %{optional(String.t() | atom) => any}
@type slots :: %{optional(String.t() | atom) => any}
@typedoc """
A render response which should be a rendered HTML string.
}
"""
@type render_response :: String.t()
@callback render(component_name, props, slots) :: render_response | no_return
@spec render(component_name, props, slots) :: render_response | no_return
def render(name, props, slots) do
case Application.get_env(:live_vue, :ssr_module, nil) do
nil ->
""
mod ->
meta = %{component: name, props: props, slots: slots}
:telemetry.span([:live_vue, :ssr], meta, fn ->
{mod.render(name, props, slots), meta}
end)
end
end
end