diff --git a/package.json b/package.json index 681a9da4..25505810 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"", "format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"", "audit": "pnpm -r audit --audit-level moderate", - "clean": "pnpm -r exec rm -rf dist" + "clean": "pnpm -r exec rm -rf dist", + "prepare": "husky install" }, "devDependencies": { "@types/bcryptjs": "^2.4.6", @@ -23,6 +24,8 @@ "@typescript-eslint/parser": "^8.0.0", "@vitest/coverage-v8": "^3.0.0", "eslint": "^9.0.0", + "husky": "^9.0.0", + "lint-staged": "^15.0.0", "prettier": "^3.0.0", "typescript": "^5.7.0", "vitest": "^3.0.0" @@ -33,5 +36,14 @@ "jose": ">=5.0.0", "react": ">=18.0.0", "zod": "^3.24.0" + }, + "lint-staged": { + "*.{ts,tsx}": [ + "eslint --fix", + "prettier --write" + ], + "*.{js,jsx,json,md,yml,yaml}": [ + "prettier --write" + ] } } diff --git a/scripts/setup-husky.sh b/scripts/setup-husky.sh new file mode 100755 index 00000000..502a5a23 --- /dev/null +++ b/scripts/setup-husky.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# Husky Setup Script for Common Platform +# Sets up pre-commit hooks with HUSKY_ENABLED flag support + +set -e + +echo "🐶 Setting up Husky git hooks for common platform..." + +# Create .husky directory if it doesn't exist +mkdir -p .husky + +# Create pre-commit hook with HUSKY_ENABLED flag +cat > .husky/pre-commit << 'EOF' +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +# Check if Husky is disabled via environment variable +if [ "$HUSKY_ENABLED" = "false" ]; then + echo "⚠️ Husky disabled via HUSKY_ENABLED=false" + echo "💡 To re-enable: unset HUSKY_ENABLED or export HUSKY_ENABLED=true" + exit 0 +fi + +echo "🐶 Running pre-commit hooks for common platform..." + +# Run lint-staged on staged files +npx lint-staged +EOF + +# Make the hook executable +chmod +x .husky/pre-commit + +echo "✅ Pre-commit hook created successfully!" +echo "" +echo "📖 Usage:" +echo " Normal commit: git commit -m 'feat: add feature'" +echo " Disable hooks: export HUSKY_ENABLED=false" +echo " Enable hooks: export HUSKY_ENABLED=true" +echo " One-time bypass: git commit --no-verify"