Add HyperSX view tab: indentation-based alternative syntax for SX
sx->hypersx transform converts parsed SX to a readable indentation-based
format: CSS selector shorthand (div.card#main), signal sugar (@count,
signal(), :=, <-), string interpolation ("Count: {@count}"), and
structural keywords (when, if, let, map, for).
Implemented as pure SX in web/lib/hypersx.sx, loaded in browser via
js_of_ocaml platform. Added as "hypersx" tab in the tree editor.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
75
hosts/ocaml/browser/bundle.sh
Executable file
75
hosts/ocaml/browser/bundle.sh
Executable file
@@ -0,0 +1,75 @@
|
||||
#!/bin/bash
|
||||
# Bundle the WASM SX kernel + platform + .sx files for serving.
|
||||
#
|
||||
# Output goes to hosts/ocaml/browser/dist/
|
||||
# Serve dist/ at /wasm/ or similar path.
|
||||
|
||||
set -e
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
BUILD=../_build/default/browser
|
||||
DIST=dist
|
||||
ROOT=../../..
|
||||
|
||||
echo "=== Bundling SX WASM browser engine ==="
|
||||
|
||||
rm -rf "$DIST"
|
||||
mkdir -p "$DIST/sx"
|
||||
|
||||
# 1. WASM kernel
|
||||
cp "$BUILD/sx_browser.bc.wasm.js" "$DIST/"
|
||||
cp -r "$BUILD/sx_browser.bc.wasm.assets" "$DIST/"
|
||||
|
||||
# Also copy js_of_ocaml version as fallback
|
||||
cp "$BUILD/sx_browser.bc.js" "$DIST/"
|
||||
|
||||
# 2. Platform JS
|
||||
cp sx-platform.js "$DIST/"
|
||||
|
||||
# 3. Spec modules
|
||||
cp "$ROOT/spec/render.sx" "$DIST/sx/"
|
||||
cp "$ROOT/web/signals.sx" "$DIST/sx/"
|
||||
cp "$ROOT/web/deps.sx" "$DIST/sx/"
|
||||
cp "$ROOT/web/router.sx" "$DIST/sx/"
|
||||
cp "$ROOT/web/page-helpers.sx" "$DIST/sx/"
|
||||
|
||||
# 3b. Freeze scope (signal persistence)
|
||||
cp "$ROOT/lib/freeze.sx" "$DIST/sx/"
|
||||
|
||||
# 4. Bytecode compiler + VM
|
||||
cp "$ROOT/lib/bytecode.sx" "$DIST/sx/"
|
||||
cp "$ROOT/lib/compiler.sx" "$DIST/sx/"
|
||||
cp "$ROOT/lib/vm.sx" "$DIST/sx/"
|
||||
|
||||
# 5. Web libraries (8 FFI primitives)
|
||||
cp "$ROOT/web/lib/dom.sx" "$DIST/sx/"
|
||||
cp "$ROOT/web/lib/browser.sx" "$DIST/sx/"
|
||||
|
||||
# 6. Web adapters
|
||||
cp "$ROOT/web/adapter-html.sx" "$DIST/sx/"
|
||||
cp "$ROOT/web/adapter-sx.sx" "$DIST/sx/"
|
||||
cp "$ROOT/web/adapter-dom.sx" "$DIST/sx/"
|
||||
|
||||
# 7. Boot helpers (platform functions in pure SX)
|
||||
cp "$ROOT/web/lib/boot-helpers.sx" "$DIST/sx/"
|
||||
cp "$ROOT/web/lib/hypersx.sx" "$DIST/sx/"
|
||||
|
||||
# 8. Web framework
|
||||
cp "$ROOT/web/engine.sx" "$DIST/sx/"
|
||||
cp "$ROOT/web/orchestration.sx" "$DIST/sx/"
|
||||
cp "$ROOT/web/boot.sx" "$DIST/sx/"
|
||||
|
||||
# Summary
|
||||
WASM_SIZE=$(du -sh "$DIST/sx_browser.bc.wasm.assets" | cut -f1)
|
||||
JS_SIZE=$(du -sh "$DIST/sx_browser.bc.js" | cut -f1)
|
||||
SX_SIZE=$(du -sh "$DIST/sx" | cut -f1)
|
||||
echo " WASM kernel: $WASM_SIZE (assets)"
|
||||
echo " JS fallback: $JS_SIZE"
|
||||
echo " SX sources: $SX_SIZE ($(ls "$DIST/sx/" | wc -l) files)"
|
||||
echo " Platform JS: $(du -sh "$DIST/sx-platform.js" | cut -f1)"
|
||||
echo ""
|
||||
echo " dist/ ready to serve"
|
||||
echo ""
|
||||
echo " HTML usage:"
|
||||
echo ' <script src="/wasm/sx_browser.bc.wasm.js"></script>'
|
||||
echo ' <script src="/wasm/sx-platform.js"></script>'
|
||||
Reference in New Issue
Block a user