#!/usr/bin/env bash

set -eEu -o pipefail

status() {
    echo "### $1"
}

sizeAsJson() {
    local desc="$1" filename="$2"
    local line
    line="{ \"name\": \"$desc\", \"minified\": $(wc -c < dist/"$filename"), \"gzipped\": $(wc -c < dist/"$filename".gz) }"
    echo "$line"
}

runTerser() {
    terser --mangle-props regex=/^_/ --ecma 6 --compress --mangle ${@+"$@"}
}

status "Clean"
rm -rf dist/

status "Compile"
tsc

status "Build module"
rollup dist/fudgel.js --file dist/fudgel.mjs --format esm
runTerser --module -o dist/fudgel.min.mjs dist/fudgel.mjs
gzip -9 -c dist/fudgel.min.mjs > dist/fudgel.min.mjs.gz

status "Build UMD"
rollup dist/fudgel.js --file dist/fudgel.umd.js --format umd --name Fudgel
runTerser -o dist/fudgel.umd.min.js dist/fudgel.umd.js
gzip -9 -c dist/fudgel.umd.min.js > dist/fudgel.umd.min.js.gz

for NAME in component; do
    status "Extracting just $NAME"
    rollup dist/only-$NAME.js --file dist/only-$NAME.mjs --format esm
    runTerser --module -o dist/only-$NAME.min.mjs dist/only-$NAME.mjs
    gzip -9 -c dist/only-$NAME.min.mjs > dist/only-$NAME.min.mjs.gz
done

status "Update docs"

# UMD to force sync/async element loading easier
cp dist/fudgel.umd.js docs/e2e/fudgel.umd.js

# ESM for playground - easier to debug
cp dist/fudgel.mjs docs/playground/fudgel.js

# ESM minified for CDN usage
cp dist/fudgel.min.mjs docs/fudgel.min.js

(
    echo '['
    echo "$(sizeAsJson "Everything (ESM)" fudgel.min.mjs),"
    echo "$(sizeAsJson "Everything (UMD)" fudgel.umd.min.js),"
    echo "$(sizeAsJson "component()" only-component.min.mjs)"
    echo ']'
) > docs/fudgel-sizes.json
git diff docs/fudgel-sizes.json
