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