| 1 | |
| 2 | # Build a single-file Mermaid + ELK layout bundle (IIFE setting window.mermaid with the ELK layout loaders |
| 3 | # registered) for scripts/build_atlas_html.py and scripts/render_check.py. |
| 4 | # Usage: build_mermaid_bundle.sh [elk-output.js] [dagre-output.js] |
| 5 | # The optional second bundle omits the ELK plugin and is suitable for fallback |
| 6 | # renderer comparison in render_check.py. |
| 7 | set -euo pipefail |
| 8 | OUT="$(realpath -m "${1:-mermaid-elk.bundle.js}")" |
| 9 | DAGRE_OUT="" |
| 10 | if [[ -n "${2:-}" ]]; then |
| 11 | DAGRE_OUT="$(realpath -m "$2")" |
| 12 | fi |
| 13 | WORK="$(mktemp -d)" |
| 14 | cd "$WORK" |
| 15 | npm init -y >/dev/null |
| 16 | npm install --silent mermaid @mermaid-js/layout-elk esbuild |
| 17 | cat > entry.js <<'EOF' |
| 18 | import mermaid from 'mermaid'; |
| 19 | import elkLayouts from '@mermaid-js/layout-elk'; |
| 20 | mermaid.registerLayoutLoaders(elkLayouts); |
| 21 | window.mermaid = mermaid; |
| 22 | EOF |
| 23 | node node_modules/esbuild/install.js >/dev/null 2>&1 || true # some npm configs block postinstall; fetch the binary explicitly |
| 24 | ./node_modules/.bin/esbuild entry.js --bundle --format=iife --minify --outfile="$OUT" |
| 25 | echo "mermaid $(node -p "require('mermaid/package.json').version") + layout-elk $(node -p "require('@mermaid-js/layout-elk/package.json').version") -> $OUT" |
| 26 | if [[ -n "$DAGRE_OUT" ]]; then |
| 27 | cat > entry-dagre.js <<'EOF' |
| 28 | import mermaid from 'mermaid'; |
| 29 | window.mermaid = mermaid; |
| 30 | EOF |
| 31 | ./node_modules/.bin/esbuild entry-dagre.js --bundle --format=iife --minify --outfile="$DAGRE_OUT" |
| 32 | echo "mermaid $(node -p "require('mermaid/package.json').version") dagre fallback -> $DAGRE_OUT" |
| 33 | fi |