Island SSR: defislands render to HTML server-side with hydration markers
Islands now render their initial state as HTML on the server, like React SSR. The client hydrates with reactive behavior on boot. Root causes fixed: - is_signal/signal_value now recognize Dict-based signals (from signals.sx) in addition to native Signal values - Register "context" as a primitive so the CEK deref frame handler can read scope stacks for reactive tracking - Load adapter-html.sx into kernel for SX-level render-to-html (islands use this instead of the OCaml render module) - Component accessors (params, body, has-children?, affinity) handle Island values with ? suffix aliases - Add platform primitives: make-raw-html, raw-html-content, empty-dict?, for-each-indexed, cek-call Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -346,7 +346,10 @@ let is_else_clause v =
|
||||
| _ -> Bool false
|
||||
|
||||
(* Signal accessors *)
|
||||
let signal_value s = match s with Signal sig' -> sig'.s_value | _ -> raise (Eval_error "not a signal")
|
||||
let signal_value s = match s with
|
||||
| Signal sig' -> sig'.s_value
|
||||
| Dict d -> (match Hashtbl.find_opt d "value" with Some v -> v | None -> Nil)
|
||||
| _ -> raise (Eval_error "not a signal")
|
||||
let signal_set_value s v = match s with Signal sig' -> sig'.s_value <- v; v | _ -> raise (Eval_error "not a signal")
|
||||
let signal_subscribers s = match s with Signal sig' -> List (List.map (fun _ -> Nil) sig'.s_subscribers) | _ -> List []
|
||||
let signal_add_sub_b _s _f = Nil
|
||||
|
||||
Reference in New Issue
Block a user