#!/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