diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..db3ccb4 --- /dev/null +++ b/start.sh @@ -0,0 +1,146 @@ +#!/bin/bash +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "$SCRIPT_DIR" + +if [ ! -f package.json ]; then + echo "package.json not found in $SCRIPT_DIR" + exit 1 +fi + +PKG_MANAGER="bun" +MODE="dev" + +while [[ "$#" -gt 0 ]]; do + arg="$1" + shift + + if [[ "$next_is_value" == "1" ]]; then + if [[ "$last_key" == "manager" ]]; then + PKG_MANAGER="$arg" + elif [[ "$last_key" == "mode" ]]; then + MODE="$arg" + fi + next_is_value=0 + fi + + case "$arg" in + clean|cleanup) + cleanup=true + ;; + manager) + last_key="manager" + next_is_value=1 + ;; + mode) + last_key="mode" + next_is_value=1 + ;; + esac +done + +ALLOWED_MANAGERS="bun npm yarn pnpm" +ALLOWED_MODES="dev prod development production" + +manager_allowed=0 +for allowed in $ALLOWED_MANAGERS; do + if [[ "$PKG_MANAGER" == "$allowed" ]]; then + manager_allowed=1 + break + fi +done + +mode_allowed=0 +for allowed in $ALLOWED_MODES; do + if [[ "$MODE" == "$allowed" ]]; then + mode_allowed=1 + break + fi +done + +if [[ "$manager_allowed" == "0" ]]; then + echo "$PKG_MANAGER is not a valid package manager, please use one of the following: $ALLOWED_MANAGERS" + exit 1 +fi + +if [[ "$mode_allowed" == "0" ]]; then + echo "$MODE is not a valid mode, please use one of the following: $ALLOWED_MODES" + exit 1 +fi + +echo "Using package manager: $PKG_MANAGER" +echo "Mode: $MODE" + +NPM_MARKER="node_modules/.npm_used" +YARN_MARKER="node_modules/.yarn_used" +PNPM_MARKER="node_modules/.pnpm_used" +BUN_MARKER="node_modules/.bun_used" + +case "$PKG_MANAGER" in + npm) + INSTALL_CMD="npm install" + RUN_CMD="npm run $MODE" + CURRENT_MARKER="$NPM_MARKER" + ;; + yarn) + INSTALL_CMD="yarn" + RUN_CMD="yarn $MODE" + CURRENT_MARKER="$YARN_MARKER" + ;; + pnpm) + INSTALL_CMD="pnpm install" + RUN_CMD="pnpm $MODE" + CURRENT_MARKER="$PNPM_MARKER" + ;; + bun) + INSTALL_CMD="bun install" + RUN_CMD="bun $MODE" + CURRENT_MARKER="$BUN_MARKER" + ;; +esac + +if [[ -f "$NPM_MARKER" && "$CURRENT_MARKER" != "$NPM_MARKER" ]] || \ + [[ -f "$YARN_MARKER" && "$CURRENT_MARKER" != "$YARN_MARKER" ]] || \ + [[ -f "$PNPM_MARKER" && "$CURRENT_MARKER" != "$PNPM_MARKER" ]] || \ + [[ -f "$BUN_MARKER" && "$CURRENT_MARKER" != "$BUN_MARKER" ]]; then + cleanup=true +fi + +if [[ "$cleanup" == "true" ]]; then + files_to_delete="package-lock.json yarn.lock pnpm-lock.yaml bun.lockb" + folders_to_delete="node_modules dist logs" + markers_to_delete="$NPM_MARKER $YARN_MARKER $PNPM_MARKER $BUN_MARKER" + + echo "Cleaning up files and folders..." + + for file in $files_to_delete; do + if [[ -f "$file" ]]; then + echo "Found $file in $SCRIPT_DIR - deleting..." + rm -f "$file" + fi + done + + for folder in $folders_to_delete; do + if [[ -d "$folder" ]]; then + echo "Found $folder in $SCRIPT_DIR - deleting..." + rm -rf "$folder" + fi + done + + for marker in $markers_to_delete; do + if [[ -f "$marker" ]]; then + rm -f "$marker" + fi + done +fi + +if [[ -n "$RUN_CMD" ]]; then + echo "Running $RUN_CMD..." + $INSTALL_CMD + $RUN_CMD +else + echo "No run command set, exiting..." +fi + +exit 0