#!/usr/bin/env bash

set -e

export EMCC_FORCE_STDLIBS=libc++

args="-Os"
if [[ "$1" == "--debug" ]]; then
  args="-s ASSERTIONS=1 SAFE_HEAP=1 -O0"
fi

mkdir -p target/scratch target/release

docker run                          \
  --rm                              \
  -v $(pwd):/src                    \
  -u $(id -u)                       \
  trzeci/emscripten-slim            \
                                    \
  emcc                              \
  -s WASM=1                         \
  -s ALLOW_MEMORY_GROWTH            \
  -s MAIN_MODULE=1                  \
  -s EXPORT_ALL=1                   \
  $args                             \
  -std=c99                          \
  -D 'fprintf(...)='                \
  -I lib/src                        \
  -I lib/include                    \
  -I lib/utf8proc                   \
  --js-library lib/web/imports.js   \
  --pre-js lib/web/prefix.js        \
  --post-js lib/web/binding.js      \
  lib/src/lib.c                     \
  lib/web/binding.c                 \
  -o target/scratch/tree-sitter.js

if [ ! -d lib/web/node_modules/terser ]; then
  (
    cd lib/web
    npm install
  )
fi

lib/web/node_modules/.bin/terser   \
  --compress                       \
  --mangle                         \
  --keep-fnames                    \
  --keep-classnames                \
  -- target/scratch/tree-sitter.js \
  > target/release/tree-sitter.js

mv target/scratch/tree-sitter.wasm target/release/tree-sitter.wasm
