host: Phase 5.1 — interactive SX-page render from a handler, 181/181
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 21s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 21s
KERNEL: add a render-page primitive (sx_server.ml, persistent mode) that renders an UNEVALUATED SX expression with the server env via sx_render_to_html. render-to-html expands defcomp components and collects keyword attrs itself; SX handlers can't reach the server env, so the prim supplies it. Fixes the attr mangling — bare render-to-html on an EVALUATED component tree turns (form :id ..) into <form>idpost-new-form..; rendering the unevaluated expr keeps :id an attr. HOST: lib/host/page.sx — host/page (expr -> HTML response) + host/page-route (mount on a GET path). New page suite (8 tests) proves a generic attributed + nested component renders correctly through a host route; verified ~editor/form renders right too. This is the component-render step of the generic interactive-SX-page capability; shell + static assets + hydration (5.2-5.4) next. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -4869,6 +4869,14 @@ let () =
|
||||
else begin
|
||||
(* Normal persistent server mode *)
|
||||
let env = make_server_env () in
|
||||
(* render-page: render an (unevaluated) SX page/component expression to HTML
|
||||
using the server env, so http-listen handlers can serve interactive SX
|
||||
pages. render-to-html expands components + collects keyword attrs itself;
|
||||
SX handlers can't reach the server env, so this primitive supplies it. *)
|
||||
ignore (env_bind env "render-page" (NativeFn ("render-page", fun args ->
|
||||
match args with
|
||||
| expr :: _ -> String (sx_render_to_html expr env)
|
||||
| _ -> raise (Eval_error "render-page: (expr)"))));
|
||||
send "(ready)";
|
||||
(* Main command loop *)
|
||||
try
|
||||
|
||||
Reference in New Issue
Block a user