146 lines
3.3 KiB
Bash
146 lines
3.3 KiB
Bash
#!/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
|