139 lines
3.5 KiB
Bash
139 lines
3.5 KiB
Bash
#!/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
|