102 lines
2.6 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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