DataStarSSE
Elixir SSE Helpers for DataStar - A framework for building reactive web applications using Server-Sent Events and hypermedia.
Installation
def deps do
[
{:datastar_sse, "~> 1.0"}
]
endQuick Start
def sse(conn, _params) do
{:ok, json} = Jason.encode(%{"response" => "", "answer" => "bread"})
conn = DataStarSSE.new_sse(conn)
with {:ok, conn} <- DataStarSSE.patch_elements(conn, ~s(<div id="question">What do you put in a toaster?</div>)),
{:ok, conn} <- DataStarSSE.patch_signals(conn, json),
{:ok, conn} <- DataStarSSE.execute_script(conn, "console.log(123)") do
conn
end
endpatch_signals/3 accepts a pre-encoded JSON string — encode with Jason.encode/1 before calling.
Reading Signals
DataStar sends signals as part of the request. Use read_signals/1 to parse them:
def sse(conn, _params) do
conn = SSE.new_sse(conn)
with {:ok, conn, signals} <- SSE.read_signals(conn),
{:ok, json} <- Jason.encode(%{"echo" => signals["message"]}),
{:ok, conn} <- SSE.patch_signals(conn, json) do
conn
end
endPhoenix Setup
Add to config.exs:
config :mime, :types, %{
"text/event-stream" => ["sse"]
}
Add to router.ex:
plug :accepts, ["sse"]Documentation
Documentation can be generated with ExDoc and published on HexDocs.