#!/usr/bin/env bash # Bundle the WASM engine + platform + web adapters into shared/static/scripts/ # # Usage: hosts/ocaml/browser/bundle.sh set -euo pipefail cd "$(dirname "$0")/../../.." WASM_LOADER="hosts/ocaml/_build/default/browser/sx_browser.bc.wasm.js" WASM_ASSETS="hosts/ocaml/_build/default/browser/sx_browser.bc.wasm.assets" PLATFORM="hosts/ocaml/browser/sx-platform.js" OUT="shared/static/scripts/sx-wasm.js" ASSET_DIR="shared/static/scripts/sx-wasm-assets" if [ ! -f "$WASM_LOADER" ]; then echo "Build first: cd hosts/ocaml && eval \$(opam env) && dune build browser/sx_browser.bc.wasm.js" exit 1 fi # 1. WASM loader (patched asset path) sed 's|"src":"sx_browser.bc.wasm.assets"|"src":"sx-wasm-assets"|' \ "$WASM_LOADER" > "$OUT" # 2. Platform layer echo "" >> "$OUT" cat "$PLATFORM" >> "$OUT" # 3. Embedded web adapters — SX source as JS string constants echo "" >> "$OUT" echo "// =========================================================================" >> "$OUT" echo "// Embedded web adapters (loaded into WASM engine at boot)" >> "$OUT" echo "// =========================================================================" >> "$OUT" echo "globalThis.__sxAdapters = {};" >> "$OUT" # Adapters to embed (order matters for dependencies) ADAPTERS="signals deps page-helpers router adapter-html" for name in $ADAPTERS; do file="web/${name}.sx" if [ -f "$file" ]; then echo -n "globalThis.__sxAdapters[\"${name}\"] = " >> "$OUT" # Escape the SX source for embedding in a JS string python3 -c " import json, sys with open('$file') as f: print(json.dumps(f.read()) + ';') " >> "$OUT" fi done # 4. Boot shim cat >> "$OUT" << 'BOOT' // ========================================================================= // WASM Boot: load adapters, then process inline