SX request handler + AJAX nav + shared JIT globals + shell cleanup
- Remove prism.js, sweetalert2, body.js, sx-browser.js from shell — only WASM kernel (sx_browser.bc.wasm.js + sx-platform.js) loads - Restore request-handler.sx integration: SX handles routing + AJAX detection, OCaml does aser → SSR → shell render pipeline - AJAX fragment support: SX-Request header returns content fragment (~14KB) instead of full page (~858KB), cached with "ajax:" prefix - Fix language/applications/etc page functions to return empty fragment instead of nil (was causing 404s) - Shared JIT VM globals: env_bind hook mirrors ALL bindings to a single shared globals table — eliminates stale-snapshot class of JIT bugs - Add native `parse` function for components that need SX parsing - Clean up unused shell params (sx-js-hash, body-js-hash, head-scripts, body-scripts, use-wasm) from shell.sx, helpers.py, and server.ml 14/32 Playwright tests pass (navigation, SSR, isomorphic, geography). Remaining failures are client-side (WASM bytecode 404s block hydration). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -43,7 +43,7 @@
|
||||
(define
|
||||
sx-handle-request
|
||||
(fn
|
||||
(path headers env)
|
||||
(path headers env shell-vars)
|
||||
(let
|
||||
((is-ajax (or (has-key? headers "sx-request") (has-key? headers "hx-request")))
|
||||
(path-expr (sx-url-to-expr path))
|
||||
@@ -52,44 +52,5 @@
|
||||
(nil? page-ast)
|
||||
nil
|
||||
(let
|
||||
((nav-path (if (starts-with? path "/sx/") path (str "/sx" path))))
|
||||
(cek-try
|
||||
(fn
|
||||
()
|
||||
(if
|
||||
is-ajax
|
||||
(let
|
||||
((content (list (make-symbol "~layouts/doc") :path nav-path page-ast)))
|
||||
(render-to-html content env))
|
||||
(let
|
||||
((wrapped (list (make-symbol "~layouts/doc") :path nav-path page-ast))
|
||||
(full-ast
|
||||
(list
|
||||
(make-symbol "~shared:layout/app-body")
|
||||
:content wrapped))
|
||||
(body-html (render-to-html full-ast env)))
|
||||
(render-to-html
|
||||
(list
|
||||
(make-symbol "~shared:shell/sx-page-shell")
|
||||
:title "SX"
|
||||
:csrf ""
|
||||
:page-sx (serialize full-ast)
|
||||
:body-html body-html
|
||||
:component-defs __shell-component-defs
|
||||
:component-hash __shell-component-hash
|
||||
:pages-sx __shell-pages-sx
|
||||
:sx-css __shell-sx-css
|
||||
:sx-css-classes __shell-sx-css-classes
|
||||
:asset-url __shell-asset-url
|
||||
:sx-js-hash __shell-sx-js-hash
|
||||
:body-js-hash __shell-body-js-hash
|
||||
:wasm-hash __shell-wasm-hash
|
||||
:head-scripts __shell-head-scripts
|
||||
:body-scripts __shell-body-scripts
|
||||
:inline-css __shell-inline-css
|
||||
:inline-head-js __shell-inline-head-js
|
||||
:init-sx __shell-init-sx
|
||||
:use-wasm true
|
||||
:meta-html "")
|
||||
env))))
|
||||
(fn (err) (str "<h1>Render error</h1><pre>" err "</pre>"))))))))
|
||||
((nav-path (if (and (>= (len path) 4) (= (slice path 0 4) "/sx/")) path (str "/sx" path))))
|
||||
{:page-ast page-ast :nav-path nav-path :is-ajax is-ajax})))))
|
||||
|
||||
Reference in New Issue
Block a user