#!/usr/bin/env bash _me_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" _runtime_dir="$_me_dir/runtimes" _platform="$1" _script="$2" set -o errtrace function check_path_exists() { local path="$1" local path_rel="./$(realpath --relative-to="$_me_dir" "$path")" if [[ "$path" == *"/" ]]; then [[ ! -d "$path" ]] && die "Path '$path_rel' does not exist" else [[ ! -f "$path" ]] && die "Path '$path_rel' does not exist" fi } function check_prog() { local prog="$1" local asdf_plugin="$2" local is_asdf_installed="$([ -x "$(command -v "asdf")" ] && echo 1 || echo 0)" local is_prog_installed="$([ -x "$(command -v "$prog")" ] && echo 1 || echo 0)" [[ -z "$asdf_plugin" ]] && asdf_plugin="$prog" if [[ $is_prog_installed == 0 ]]; then if [[ $is_asdf_installed == 1 ]]; then asdf plugin add $asdf_plugin asdf install $asdf_plugin latest [[ $? != 0 ]] && die "Unable to install '$prog'" asdf set -u $asdf_plugin "$(asdf latest $asdf_plugin)" echo "---" >&1 else die "'asdf' not installed, cannot install '$prog'" fi else return 1 fi } function die() { echo -e "\033[1;31mError: $1\033[0m" >&2 exit 225 } function get_code_path() { local platform="$1" local script="$2" local suffix="$3" echo "$_me_dir/code/$platform/$script$suffix" } function run_bash() { local path="$(get_code_path "bash" "$1" ".sh")" local args=("$@") check_path_exists "$path" bash "$path" "${args[@]}" } function run_deno() { local path="$(get_code_path "deno" "$1" ".ts")" check_path_exists "$path" check_prog "deno" deno run --unstable-cron -A "$path" } function run_html() { local path="$(get_code_path "html" "$1" "/")" check_path_exists "$path" check_prog "caddy" caddy file-server --browse --listen 0.0.0.0:8080 -root "$path" #xdg-open "http://0.0.0.0:8080" } case "$_platform" in "bash") run_bash "$_script" "$@" ;; "deno") run_deno "$_script" ;; "html") run_html "$_script" ;; esac