;; lib/host/page.sx — serve interactive SX component/island pages on the host ;; (Phase 5: the generic interactive-SX-page capability). ;; ;; The bare `render-to-html` path mangles an EVALUATED component tree's keyword ;; attributes ((form :id ..) -> "
idpost-new-form..."), because evaluating a ;; defcomp body turns `:id` into a child. The kernel `render-page` primitive ;; instead renders an UNEVALUATED expression with the server env: render-to-html ;; expands the components itself and collects keyword args as attributes. SX ;; handlers can't reach the server env, so render-page supplies it. ;; ;; host/page wraps a rendered expression as an HTML response; host/page-route ;; mounts it on a GET path. This is the component-render step (5.1); the full page ;; shell (inlined component defs + CSS + client runtime + hydration) and static ;; asset serving (5.2–5.4) build on top to make the page interactive. ;; Depends on the kernel `render-page` primitive + lib/dream/types.sx (dream-html). ;; Render an unevaluated SX page/component expression to an HTML response. (define host/page (fn (expr) (dream-html (render-page expr)))) ;; Mount a GET route that renders a fixed page expression. (define host/page-route (fn (path expr) (dream-get path (fn (req) (host/page expr)))))