datastar

Types

SSE Events that can be send to the client

pub type Event {
  EventMergeFragment(MergeFragmentConfig)
  EventRemoveFragments(RemoveFragmentsConfig)
  EventMergeSignals(MergeSignalsConfig)
  EventRemoveSignals(RemoveSignalsConfig)
  EventExecuteScript(ExecuteScriptConfig)
}

Constructors

  • EventMergeFragment(MergeFragmentConfig)
  • EventRemoveFragments(RemoveFragmentsConfig)
  • EventMergeSignals(MergeSignalsConfig)
  • EventRemoveSignals(RemoveSignalsConfig)
  • EventExecuteScript(ExecuteScriptConfig)
pub type ExecuteScriptConfig {
  ExecuteScriptConfig(
    script: String,
    options: ExecuteScriptOptions,
  )
}

Constructors

  • ExecuteScriptConfig(
      script: String,
      options: ExecuteScriptOptions,
    )
pub type ExecuteScriptOptions {
  ExecuteScriptOptions(
    attributes: List(#(String, String)),
    auto_remove: Bool,
    event_id: Option(String),
    retry: Option(Int),
  )
}

Constructors

  • ExecuteScriptOptions(
      attributes: List(#(String, String)),
      auto_remove: Bool,
      event_id: Option(String),
      retry: Option(Int),
    )
pub type MergeFragmentConfig {
  MergeFragmentConfig(
    fragments: String,
    options: MergeFragmentOptions,
  )
}

Constructors

  • MergeFragmentConfig(
      fragments: String,
      options: MergeFragmentOptions,
    )
pub type MergeFragmentOptions {
  MergeFragmentOptions(
    event_id: Option(String),
    merge_mode: MergeMode,
    retry: Option(Int),
    selector: Option(String),
    settle_duration: Int,
    view_transition: Bool,
  )
}

Constructors

  • MergeFragmentOptions(
      event_id: Option(String),
      merge_mode: MergeMode,
      retry: Option(Int),
      selector: Option(String),
      settle_duration: Int,
      view_transition: Bool,
    )

The merge mode used by merge fragments

pub type MergeMode {
  Morph
  Inner
  Outer
  Prepend
  Append
  Before
  After
  UpsertAttributes
}

Constructors

  • Morph
  • Inner
  • Outer
  • Prepend
  • Append
  • Before
  • After
  • UpsertAttributes
pub type MergeSignalsConfig {
  MergeSignalsConfig(signals: Json, options: MergeSignalsOptions)
}

Constructors

  • MergeSignalsConfig(signals: Json, options: MergeSignalsOptions)
pub type MergeSignalsOptions {
  MergeSignalsOptions(
    event_id: Option(String),
    retry: Option(Int),
    only_if_missing: Bool,
  )
}

Constructors

  • MergeSignalsOptions(
      event_id: Option(String),
      retry: Option(Int),
      only_if_missing: Bool,
    )
pub type RemoveFragmentsConfig {
  RemoveFragmentsConfig(
    selector: String,
    options: RemoveFragmentsOptions,
  )
}

Constructors

  • RemoveFragmentsConfig(
      selector: String,
      options: RemoveFragmentsOptions,
    )
pub type RemoveFragmentsOptions {
  RemoveFragmentsOptions(
    event_id: Option(String),
    retry: Option(Int),
    settle_duration: Int,
    view_transition: Bool,
  )
}

Constructors

  • RemoveFragmentsOptions(
      event_id: Option(String),
      retry: Option(Int),
      settle_duration: Int,
      view_transition: Bool,
    )
pub type RemoveSignalsConfig {
  RemoveSignalsConfig(
    signals: List(String),
    options: RemoveSignalsOptions,
  )
}

Constructors

  • RemoveSignalsConfig(
      signals: List(String),
      options: RemoveSignalsOptions,
    )
pub type RemoveSignalsOptions {
  RemoveSignalsOptions(
    event_id: Option(String),
    retry: Option(Int),
  )
}

Constructors

  • RemoveSignalsOptions(
      event_id: Option(String),
      retry: Option(Int),
    )

Functions

pub fn event_to_string(event: Event) -> String

Takes an Event and generates a string to send back to the client

remove_fragments("#target")
|> remove_fragments_end
|> event_to_string

Generates:

event: datastar-remove-fragments
data: selector #target

pub fn events_to_string(events events: List(Event)) -> String

Takes a list of Event and generates the string to send to the client

[
  merge_fragments("<span>Hello</span>")
  |> merge_fragments_end,
  remove_fragments("#target")
  |> remove_fragments_end,
]
|> events_to_string

Generates:

event: datastar-merge-fragments
data: fragments <span>Hello</span>

event: datastar-remove-fragments
data: selector #target

pub fn execute_script(script: String) -> ExecuteScriptConfig

Generate a datastar-execute-script event

execute_script("window.location = \"https://data-star.dev\"")
|> execute_script_event_id("123")
|> execute_script_end

Generates

event: datastar-execute-script
id: 123
data: script window.location = \"https://data-star.dev\"
pub fn execute_script_attributes(
  config: ExecuteScriptConfig,
  value: List(#(String, String)),
) -> ExecuteScriptConfig
|> execute_script_attributes([#("type", "text/javascript")]),

Generates:

data: attributes type text/javascript
pub fn execute_script_auto_remove(
  config: ExecuteScriptConfig,
  value: Bool,
) -> ExecuteScriptConfig
|> execute_script_auto_remove(False),

Generates:

data: autoRemove false
pub fn execute_script_end(config: ExecuteScriptConfig) -> Event
pub fn execute_script_event_id(
  config: ExecuteScriptConfig,
  value: String,
) -> ExecuteScriptConfig
...
|> execute_script_event_id("123")

Generates:

id: 123
pub fn execute_script_retry(
  config: ExecuteScriptConfig,
  value: Int,
) -> ExecuteScriptConfig
|> execute_script_retry(3000),

Generates:

retry: 3000
pub fn merge_fragments(
  fragments fragments: String,
) -> MergeFragmentConfig

Event to send new fragments to the client

merge_fragments("<span>1</span>")
|> merge_fragments_selector("#feed")
|> merge_fragments_end

Generates:

event: datastar-merge-fragments
data: selector #feed
data: fragments <span>1</span>

pub fn merge_fragments_end(config: MergeFragmentConfig) -> Event
pub fn merge_fragments_event_id(
  config: MergeFragmentConfig,
  value: String,
) -> MergeFragmentConfig
|> merge_fragments_event_id("123"),

Generates:

id: 123
pub fn merge_fragments_merge_mode(
  config: MergeFragmentConfig,
  value: MergeMode,
) -> MergeFragmentConfig
|> merge_fragments_merge_mode(MergeMode.Inner),

Generates:

data: mergeMode inner
pub fn merge_fragments_retry(
  config: MergeFragmentConfig,
  value: Int,
) -> MergeFragmentConfig
|> merge_fragments_retry(3000),

Generates:

retry: 3000
pub fn merge_fragments_selector(
  config: MergeFragmentConfig,
  value: String,
) -> MergeFragmentConfig
|> merge_fragments_selector("#feed"),

Generates:

data: selector #feed
pub fn merge_fragments_settle_duration(
  config: MergeFragmentConfig,
  value: Int,
) -> MergeFragmentConfig
pub fn merge_fragments_view_transition(
  config: MergeFragmentConfig,
  value: Bool,
) -> MergeFragmentConfig
pub fn merge_signals(signals: Json) -> MergeSignalsConfig

Generate a datastar-merge-signals event

let json = json.object([
  #("name", json.string("sam"))
])

merge_signals(json)
|> merge_signals_end

Generates:

event: datastar-merge-signals
data: signals {\"name\":\"Sam\"}

pub fn merge_signals_end(config: MergeSignalsConfig) -> Event
pub fn merge_signals_event_id(
  config: MergeSignalsConfig,
  value: String,
) -> MergeSignalsConfig
...
|> merge_signals_event_id("123")

Generates:

id: 123
pub fn merge_signals_only_if_missing(
  config: MergeSignalsConfig,
  value: Bool,
) -> MergeSignalsConfig
|> merge_signals_only_if_missing(True),

Generates:

data: onlyIfMissing true
pub fn merge_signals_retry(
  config: MergeSignalsConfig,
  value: Int,
) -> MergeSignalsConfig
|> merge_signals_retry(3000),

Generates:

retry: 3000
pub fn remove_fragments(
  selector: String,
) -> RemoveFragmentsConfig

Event to remove fragments on the client

remove_fragments("#feed")
|> remove_fragments_end

Generates:

event: datastar-remove-fragments
data: selector #feed

pub fn remove_fragments_end(
  config: RemoveFragmentsConfig,
) -> Event
pub fn remove_fragments_event_id(
  config: RemoveFragmentsConfig,
  value: String,
) -> RemoveFragmentsConfig
|> remove_fragments_event_id("123"),

Generates:

id: 123
pub fn remove_fragments_retry(
  config: RemoveFragmentsConfig,
  value: Int,
) -> RemoveFragmentsConfig
|> remove_fragments_retry(3000),

Generates:

retry: 3000
pub fn remove_fragments_settle_duration(
  config: RemoveFragmentsConfig,
  value: Int,
) -> RemoveFragmentsConfig
pub fn remove_fragments_view_transition(
  config: RemoveFragmentsConfig,
  value: Bool,
) -> RemoveFragmentsConfig
pub fn remove_signals(
  signals: List(String),
) -> RemoveSignalsConfig

Generate a datastar-remove-signals event

remove_signals(["user.name", "user.email"])
|> remove_signals_end

Generates:

event: datastar-remove-signals
data: paths user.name
data: paths user.email

pub fn remove_signals_end(config: RemoveSignalsConfig) -> Event
pub fn remove_signals_event_id(
  config: RemoveSignalsConfig,
  value: String,
) -> RemoveSignalsConfig
...
|> remove_signals_event_id("123")

Generates:

id: 123
pub fn remove_signals_retry(
  config: RemoveSignalsConfig,
  value: Int,
) -> RemoveSignalsConfig
|> remove_signals_retry(3000),

Generates:

retry: 3000
Search Document