generated from projects/testosmaximus
102 lines
2.6 KiB
Bash
Executable File
102 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
||
set -euo pipefail
|
||
|
||
MODULE_PATH="source/package.json"
|
||
LOCK_PATH="source/package-lock.json"
|
||
NEW_NAME=""
|
||
NEW_VERSION=""
|
||
SELF_DELETE=false
|
||
|
||
function help() {
|
||
echo "Usage: ./init.sh --name newname [--version x.y.z] [--once]"
|
||
echo
|
||
echo "If any args are missing, you'll be prompted like a good squirrel."
|
||
exit 0
|
||
}
|
||
|
||
# === CLI Args ===
|
||
while [[ $# -gt 0 ]]; do
|
||
case "$1" in
|
||
--name) NEW_NAME="$2"; shift ;;
|
||
--version) NEW_VERSION="$2"; shift ;;
|
||
--once) SELF_DELETE=true ;;
|
||
--help) help ;;
|
||
*) echo "❌ Unknown option: $1"; help ;;
|
||
esac
|
||
shift
|
||
done
|
||
|
||
# === Prompt if lazy ===
|
||
[[ -z "$NEW_NAME" ]] && {
|
||
read -rp "📦 Enter new module name (e.g. @fluff/my-module): " NEW_NAME
|
||
[[ -z "$NEW_NAME" ]] && {
|
||
echo "😡 You didn't enter a name. I’m leaving."
|
||
exit 1
|
||
}
|
||
}
|
||
|
||
[[ -z "$NEW_VERSION" ]] && {
|
||
read -rp "🕒 Enter version [default: 0.0.1]: " user_version
|
||
NEW_VERSION="${user_version:-0.0.1}"
|
||
}
|
||
|
||
echo "✨ Renaming module:"
|
||
echo " → name: $NEW_NAME"
|
||
echo " → version: $NEW_VERSION"
|
||
|
||
# === Safety check ===
|
||
if [[ ! -f "$MODULE_PATH" ]]; then
|
||
echo "💥 package.json not found at $MODULE_PATH"
|
||
exit 1
|
||
fi
|
||
|
||
# === Requires jq ===
|
||
if ! command -v jq &>/dev/null; then
|
||
echo "🧨 'jq' not installed."
|
||
|
||
if [[ "$(uname)" == "Darwin" ]]; then
|
||
read -rp "🍎 Install jq via brew? (y/n): " install_jq
|
||
if [[ "$install_jq" =~ ^[Yy]$ ]]; then
|
||
brew install jq || { echo "💔 brew failed. Exiting."; exit 1; }
|
||
else
|
||
echo "🧼 Cannot proceed without jq. Goodbye."
|
||
exit 1
|
||
fi
|
||
elif [[ -f /etc/debian_version ]]; then
|
||
read -rp "🐧 Install jq via apt? (y/n): " install_jq
|
||
if [[ "$install_jq" =~ ^[Yy]$ ]]; then
|
||
sudo apt-get update && sudo apt-get install -y jq || { echo "💔 apt-get failed. Exiting."; exit 1; }
|
||
else
|
||
echo "🧼 Cannot proceed without jq. Goodbye."
|
||
exit 1
|
||
fi
|
||
else
|
||
echo "🧽 Unknown OS. Please install 'jq' manually."
|
||
exit 1
|
||
fi
|
||
fi
|
||
|
||
# === Apply changes to package.json ===
|
||
tmpfile=$(mktemp)
|
||
jq ".name = \"$NEW_NAME\" | .version = \"$NEW_VERSION\"" "$MODULE_PATH" > "$tmpfile"
|
||
mv "$tmpfile" "$MODULE_PATH"
|
||
echo "📦 Updated $MODULE_PATH"
|
||
|
||
# === Apply changes to package-lock.json if it exists ===
|
||
if [[ -f "$LOCK_PATH" ]]; then
|
||
tmp_lock=$(mktemp)
|
||
jq ".name = \"$NEW_NAME\" | .version = \"$NEW_VERSION\"" "$LOCK_PATH" > "$tmp_lock"
|
||
mv "$tmp_lock" "$LOCK_PATH"
|
||
echo "🔒 Updated $LOCK_PATH"
|
||
else
|
||
echo "⚠️ No lock file at $LOCK_PATH – skipping."
|
||
fi
|
||
|
||
echo "✅ Success! Module is now '$NEW_NAME@$NEW_VERSION'"
|
||
|
||
# === Self delete ===
|
||
if [[ "$SELF_DELETE" = true ]]; then
|
||
echo "🗑️ Self-destructing..."
|
||
rm -- "$0"
|
||
fi
|