Files
rose-ash/hosts/ocaml/browser/bundle.sh
giles b62dfb25e5 Highlight returns SX tree, rendered to HTML/DOM by pipeline
highlight.sx now returns a list of (span :class "..." "text") elements
instead of a string. The rendering pipeline handles the rest:
- Server render-to-html: produces <span class="...">text</span>
- Client render-to-dom: produces DOM span elements
- Aser: serializes spans as SX for client rendering

Key fixes:
- hl-span uses (make-keyword "class") not :class (keywords evaluate
  to strings in list context)
- render-sx-tokens returns flat list of spans (no wrapper)
- hl-escape is identity (no escaping needed for tree values)
- highlight.sx added to browser bundle + platform loader
- ~docs/code renders src directly as child of pre

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 23:12:36 +00:00

86 lines
2.6 KiB
Bash
Executable File

#!/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/signals.sx" "$DIST/sx/core-signals.sx"
cp "$ROOT/spec/render.sx" "$DIST/sx/"
cp "$ROOT/web/web-signals.sx" "$DIST/sx/signals.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) + highlight (syntax coloring)
cp "$ROOT/lib/freeze.sx" "$DIST/sx/"
cp "$ROOT/lib/highlight.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/"
# 7b. Test harness (for inline test runners)
cp "$ROOT/spec/harness.sx" "$DIST/sx/"
cp "$ROOT/web/harness-reactive.sx" "$DIST/sx/"
cp "$ROOT/web/harness-web.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/"
# 9. CSSX (stylesheet language — runtime with tw, ~cssx/tw, cssx-process-token etc.)
cp "$ROOT/shared/sx/templates/cssx.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>'