defmodule LiveSvelte.SSR.NotConfigured do @moduledoc false defexception [:message] end defmodule LiveSvelte.SSR do @moduledoc """ A behaviour for rendering Svelte components server-side. To define a custom renderer, change the application config in `config.exs`: config :live_svelte, ssr_module: MyCustomSSRModule """ @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 take the shape: %{ "css" => %{ "code" => String.t | nil, "map" => String.t | nil }, "head" => String.t, "html" => String.t } """ @type render_response :: %{ required(String.t) => %{ required(String.t) => String.t | nil } | 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 mod = Application.get_env(:live_svelte, :ssr_module, LiveSvelte.SSR.NodeJS) mod.render(name, props, slots) end @deprecated "Use LiveSvelte.SSR.NodeJS.server_path/0 instead." def server_path() do LiveSvelte.SSR.NodeJS.server_path() end end