#!/bin/sh

usage () {
cat << USAGE
script/test-size
  Commands:
    g, gzip (default)    Output gzip size
    m, minified          Output size minified
    d, discify           Run discify
USAGE
}

# use zopfli for better compression if available
gzip () {
  zopfli -h 2>/dev/null
  if [ $? -eq 0 ]; then
    zopfli "$1" -i1000 -c | wc -c
  else
    gzip-size < "$1"
  fi
}

gzip_size () {
  mkdir -p tmp/
  browserify index.js \
    -g unassertify \
    -g yo-yoify \
    -g es2020 \
    -g uglifyify \
    -p bundle-collapser/plugin \
    | uglifyjs \
    > tmp/bundle.min.js

    gzip tmp/bundle.min.js | pretty-bytes
    rm -rf tmp/
}

min_size () {
  browserify index.js \
    -g unassertify \
    -g yo-yoify \
    -g es2020 \
    -g uglifyify \
    -p bundle-collapser/plugin \
    | uglifyjs \
    | wc -c \
    | pretty-bytes
}

run_discify () {
  browserify index.js --full-paths \
    -g unassertify \
    -g yo-yoify \
    -g es2020 \
    -g uglifyify \
    | uglifyjs \
    | discify --open
}

# set CLI flags
getopt -T > /dev/null
if [ "$?" -eq 4 ]; then
  args="$(getopt --long help discify minified --options hmdg -- "$*")"
else
  args="$(getopt h "$*")";
fi
[ ! $? -eq 0 ] && { usage && exit 2; }
eval set -- "$args"

# parse CLI flags
while true; do
  case "$1" in
    -h|--help) usage && exit 1 ;;
    -- ) shift; break ;;
    * ) break ;;
  esac
done

case "$1" in
  d|discify) shift; run_discify "$@" ;;
  m|minified) shift; printf "min:  %s\n" "$(min_size)" "$@" ;;
  g|gzip|*) shift; printf "gzip: %s\n" "$(gzip_size)" "$@" ;;
esac
