Packages

A server side for glare, the web framework based on SolidJS, adding server signals and more.

Current section

Files

Jump to
meadow src meadow.gleam
Raw

src/meadow.gleam

import glare.{create_render, select}
import glare/element.{type Node, main}
import gleam/io
import gleam/list
import server
pub type Signal(a) {
Signal(value: a, name: String)
}
@target(javascript)
pub fn html(node: List(Node)) {
create_render(main(node), select("body"))
}
@target(erlang)
pub fn html(_) {
Nil
}
@target(javascript)
@external(javascript, "./external.mjs", "server_signal")
pub fn server_signal(signal: Signal(a)) -> #(fn() -> a, fn(a) -> Nil)
@target(erlang)
pub fn server_signal(
prev: List(server.Handler(a)),
signal: Signal(a),
handle: fn(a) -> a,
) -> List(server.Handler(a)) {
[server.Signal(signal.name, signal.value, handle), ..prev]
}
@target(erlang)
pub fn start_server(
routes: List(fn(List(server.Handler(Int))) -> List(server.Handler(Int))),
) -> Nil {
routes
|> list.fold([], fn(routes, route) { route(routes) })
|> server.server
}
@target(javascript)
pub fn start_server(_) {
Nil
}