Server-Sent Events (SSE) support for MoonBit (JS client + Native server)
Dependencies
moon add f4ah6o/sse@0.3.1///|
import {
"f4ah6o/sse/src/sse",
}
///|
fn main {
let conn = @sse.connect("http://localhost:8080/events")
conn
|> @sse.on_message(fn(msg) { println("Received: \{msg.data}") })
|> @sse.on_error(fn(err) { println("Error: \{err}") })
|> @sse.on_open(fn(_state) { println("Connection opened") })
// Close when done
@sse.close(conn)
}import {
"f4ah6o/sse/src/sse" @sse,
}
let conn = @sse.connect("http://localhost:8080/events")
conn
|> @sse.on("notification", fn(msg) {
println("Notification: \{msg.data}")
})
|> @sse.on("update", fn(msg) {
println("Update: \{msg.data}")
})///|
import {
"f4ah6o/sse/src/sse",
}
///|
let conn = @sse.connect("http://localhost:8080/events")
|> @sse.setup_auto_reconnect
|> @sse.on_message(fn(msg) { println("Received: \{msg.data}") })
// Will automatically reconnect on connection loss
// up to max_retries times with reconnect_interval delayimport {
"f4ah6o/sse" @root,
"f4ah6o/sse/src/sse" @sse,
}
let config = {
...@root.default_connection_config("http://localhost:8080/events")
with_credentials: true
reconnect_interval: 5000
max_retries: 5
}
let conn = @sse.connect_with_config(config)
|> @sse.on_message(fn(msg) {
println("Event: \{msg.event_name}, Data: \{msg.data}")
})# Check formatting and all supported targets
moon fmt --check
moon check --target all
# Check each target-specific subpackage
moon check src/sse --target js
moon check src/server --target native
# Run tests for all supported targets
moon test --target all
# Update snapshots after behavioral changes
moon test --target all --updatepub struct ConnectionConfig {
url : String
with_credentials : Bool
reconnect_interval : Int
max_retries : Int
}pub struct SseMessage {
event_name : String
data : String
origin : String
id : String?
}Install
Download zipServer-Sent Events (SSE) support for MoonBit (JS client + Native server)
Dependencies