#!/bin/bash SCRIPT_DIR="$(cd "$(dirname "$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" next_is_value=0 last_key="" for arg in "$@"; do if [ "$next_is_value" == "1" ]; then if [ "$last_key" == "manager" ]; then PKG_MANAGER="$arg" fi if [ "$last_key" == "mode" ]; then MODE="$arg" fi next_is_value=0 fi if [ "$arg" == "clean" ] || [ "$arg" == "cleanup" ]; then goto_cleanup=1 fi if [ "$arg" == "manager" ]; then last_key="manager" next_is_value=1 fi if [ "$arg" == "mode" ]; then last_key="mode" next_is_value=1 fi done ALLOWED_MANAGERS=("bun" "npm" "yarn" "pnpm") ALLOWED_MODES=("dev" "prod" "development" "production") manager_allowed=0 for allowed_manager in "${ALLOWED_MANAGERS[@]}"; do if [ "$PKG_MANAGER" == "$allowed_manager" ]; then manager_allowed=1 fi done mode_allowed=0 for allowed_mode in "${ALLOWED_MODES[@]}"; do if [ "$MODE" == "$allowed_mode" ]; then mode_allowed=1 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" if [ "$PKG_MANAGER" == "npm" ]; then INSTALL_CMD="npm install" RUN_CMD="npm run $MODE" CURRENT_MARKER="$NPM_MARKER" elif [ "$PKG_MANAGER" == "yarn" ]; then INSTALL_CMD="yarn" RUN_CMD="yarn $MODE" CURRENT_MARKER="$YARN_MARKER" elif [ "$PKG_MANAGER" == "pnpm" ]; then INSTALL_CMD="pnpm install" RUN_CMD="pnpm $MODE" CURRENT_MARKER="$PNPM_MARKER" elif [ "$PKG_MANAGER" == "bun" ]; then INSTALL_CMD="bun install" RUN_CMD="bun $MODE" CURRENT_MARKER="$BUN_MARKER" fi if [ -f "$NPM_MARKER" ] && [ "$CURRENT_MARKER" != "$NPM_MARKER" ]; then goto_cleanup=1; fi if [ -f "$YARN_MARKER" ] && [ "$CURRENT_MARKER" != "$YARN_MARKER" ]; then goto_cleanup=1; fi if [ -f "$PNPM_MARKER" ] && [ "$CURRENT_MARKER" != "$PNPM_MARKER" ]; then goto_cleanup=1; fi if [ -f "$BUN_MARKER" ] && [ "$CURRENT_MARKER" != "$BUN_MARKER" ]; then goto_cleanup=1; fi if [ "$goto_cleanup" == "1" ]; 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 exit 0 fi if [ -n "$RUN_CMD" ]; then echo "Running $RUN_CMD..." $INSTALL_CMD $RUN_CMD else echo "No run command set, exiting..." fi exit 0