datastar_beam (datastar_beam v0.1.0)

View Source

Portable Datastar SDK core.

This module intentionally knows nothing about Cowboy, Plug, Mist, Elli, or any other web server. It only knows how to produce Datastar-compliant SSE event bytes and parse incoming Datastar signals.

Summary

Functions

Build a Datastar frontend action expression like @post(/path')'.

Build a Datastar frontend action expression.

Log a value to the browser console.

Log a value to the browser console.

Encode a generic SSE event.

Encode a generic SSE event with Datastar/WHATWG SSE options.

Encode JavaScript execution as a Datastar script patch.

Encode JavaScript execution as a Datastar script patch.

Encode a datastar-patch-elements event.

Encode a datastar-patch-elements event.

Encode a datastar-patch-signals event.

Encode a datastar-patch-signals event.

Parse Datastar signals from request parts.

Redirect the browser by executing JavaScript on the client.

Redirect the browser by executing JavaScript on the client.

Encode a datastar-patch-elements event that removes matching elements.

Encode a datastar-patch-elements removal event.

Remove one or more signals by setting dot-notated paths to JSON null.

Remove one or more signals by setting dot-notated paths to JSON null.

Headers recommended for Datastar SSE responses.

Types

event_type/0

-type event_type() :: datastar_patch_elements | datastar_patch_signals | binary() | atom().

http_verb/0

-type http_verb() :: get | post | put | patch | delete | binary() | atom().

iodata_or_string/0

-type iodata_or_string() :: iodata() | unicode:chardata() | {safe, iodata()} | {ok, iodata()}.

option_key/0

-type option_key() ::
          event_id | retry | retry_duration | selector | mode | namespace | use_view_transition |
          use_view_transitions | view_transition_selector | only_if_missing | auto_remove | attributes |
          level | options.

options/0

-type options() :: #{option_key() => term()} | [{option_key(), term()}].

read_method/0

-type read_method() :: get | post | put | patch | delete | binary() | atom().

Functions

action(Verb, Path)

-spec action(http_verb(), iodata_or_string()) -> iodata().

Build a Datastar frontend action expression like @post(/path')'.

action(Verb, Path, Options)

-spec action(http_verb(), iodata_or_string(), options()) -> iodata().

Build a Datastar frontend action expression.

Pass {options, RawJsObject} to include a raw Datastar options object, for example #{options => <<"{retryMaxCount: Infinity}">>}.

console_log(Message)

-spec console_log(term()) -> iodata().

Log a value to the browser console.

console_log(Message, Options)

-spec console_log(term(), options()) -> iodata().

Log a value to the browser console.

Supported levels: log, warn, error, info and debug.

delete(Path)

-spec delete(iodata_or_string()) -> iodata().

delete(Path, Options)

-spec delete(iodata_or_string(), options()) -> iodata().

event(EventType, DataLines)

-spec event(event_type(), [iodata_or_string()]) -> iodata().

Encode a generic SSE event.

event(EventType, DataLines, Options)

-spec event(event_type(), [iodata_or_string()], options()) -> iodata().

Encode a generic SSE event with Datastar/WHATWG SSE options.

execute_script(Script)

-spec execute_script(iodata_or_string()) -> iodata().

Encode JavaScript execution as a Datastar script patch.

execute_script(Script, Options)

-spec execute_script(iodata_or_string(), options()) -> iodata().

Encode JavaScript execution as a Datastar script patch.

Supported options: auto_remove (default true), attributes, event_id and retry_duration. Attributes are trusted iodata snippets such as <<"type=\"module\"">>.

get(Path)

-spec get(iodata_or_string()) -> iodata().

get(Path, Options)

-spec get(iodata_or_string(), options()) -> iodata().

patch(Path)

-spec patch(iodata_or_string()) -> iodata().

patch(Path, Options)

-spec patch(iodata_or_string(), options()) -> iodata().

patch_elements(Elements)

-spec patch_elements(iodata_or_string() | undefined) -> iodata().

Encode a datastar-patch-elements event.

patch_elements(Elements, Options)

-spec patch_elements(iodata_or_string() | undefined, options()) -> iodata().

Encode a datastar-patch-elements event.

Supported options: selector, mode, namespace, use_view_transition, view_transition_selector, event_id and retry_duration.

patch_signals(Signals)

-spec patch_signals(iodata_or_string() | map()) -> iodata().

Encode a datastar-patch-signals event.

patch_signals(Signals, Options)

-spec patch_signals(iodata_or_string() | map(), options()) -> iodata().

Encode a datastar-patch-signals event.

Signals may be an already-encoded JSON/Datastar object expression, or an Erlang map that OTP's json module can encode.

post(Path)

-spec post(iodata_or_string()) -> iodata().

post(Path, Options)

-spec post(iodata_or_string(), options()) -> iodata().

put(Path)

-spec put(iodata_or_string()) -> iodata().

put(Path, Options)

-spec put(iodata_or_string(), options()) -> iodata().

read_signals(Method, QueryString, Body)

-spec read_signals(read_method(), iodata_or_string(), iodata_or_string()) ->
                      {ok, term()} | {error, missing_datastar | invalid_json | invalid_query | term()}.

Parse Datastar signals from request parts.

For GET and DELETE requests this reads the URL query parameter named datastar. For all other methods it decodes the request body as JSON.

redirect(Url)

-spec redirect(iodata_or_string()) -> iodata().

Redirect the browser by executing JavaScript on the client.

redirect(Url, Options)

-spec redirect(iodata_or_string(), options()) -> iodata().

Redirect the browser by executing JavaScript on the client.

remove_elements(Selector)

-spec remove_elements(iodata_or_string()) -> iodata().

Encode a datastar-patch-elements event that removes matching elements.

remove_elements(Selector, Options)

-spec remove_elements(iodata_or_string(), options()) -> iodata().

Encode a datastar-patch-elements removal event.

Supported options: event_id and retry_duration.

remove_signals(Paths)

-spec remove_signals(iodata_or_string() | [iodata_or_string()]) -> iodata().

Remove one or more signals by setting dot-notated paths to JSON null.

remove_signals(Paths, Options)

-spec remove_signals(iodata_or_string() | [iodata_or_string()], options()) -> iodata().

Remove one or more signals by setting dot-notated paths to JSON null.

Paths may be a single path like <<"user.profile.theme">> or a list of paths. Shared prefixes are deep-merged.

sse_headers()

-spec sse_headers() -> #{binary() => binary()}.

Headers recommended for Datastar SSE responses.