forked from trent_larson/crowd-funder-for-time-pwa
- Change @typescript-eslint/no-explicit-any from warn to error to block builds with any types - Add type-safety-check script for automated pre-commit validation - Implement comprehensive pre-commit checks including ESLint, TypeScript compilation, and any type scanning - Include database migration status verification in pre-commit process - Provide colored output and clear guidance for type safety issues This ensures type safety is enforced at the CI level and prevents regression of any type usage.
104 lines
3.1 KiB
Bash
Executable File
104 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Type Safety Pre-commit Check Script
|
|
# This script ensures type safety before commits by running linting and type checking
|
|
|
|
set -e
|
|
|
|
echo "🔍 Running Type Safety Pre-commit Checks..."
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Function to print colored output
|
|
print_status() {
|
|
echo -e "${GREEN}✅ $1${NC}"
|
|
}
|
|
|
|
print_warning() {
|
|
echo -e "${YELLOW}⚠️ $1${NC}"
|
|
}
|
|
|
|
print_error() {
|
|
echo -e "${RED}❌ $1${NC}"
|
|
}
|
|
|
|
# Check if we're in the right directory
|
|
if [ ! -f "package.json" ]; then
|
|
print_error "Must run from project root directory"
|
|
exit 1
|
|
fi
|
|
|
|
# Step 1: Run ESLint with TypeScript rules
|
|
print_status "Running ESLint TypeScript checks..."
|
|
if npm run lint > /dev/null 2>&1; then
|
|
print_status "ESLint passed - no type safety issues found"
|
|
else
|
|
print_error "ESLint failed - type safety issues detected"
|
|
echo ""
|
|
echo "Running lint with details..."
|
|
npm run lint
|
|
echo ""
|
|
print_error "Please fix the above type safety issues before committing"
|
|
exit 1
|
|
fi
|
|
|
|
# Step 2: Run TypeScript type checking
|
|
print_status "Running TypeScript type checking..."
|
|
if npm run type-check > /dev/null 2>&1; then
|
|
print_status "TypeScript compilation passed"
|
|
else
|
|
print_error "TypeScript compilation failed"
|
|
echo ""
|
|
echo "Running type check with details..."
|
|
npm run type-check
|
|
echo ""
|
|
print_error "Please fix the above TypeScript errors before committing"
|
|
exit 1
|
|
fi
|
|
|
|
# Step 3: Check for any remaining 'any' types
|
|
print_status "Scanning for any remaining 'any' types..."
|
|
ANY_COUNT=$(grep -r "any" src/ --include="*.ts" --include="*.vue" | grep -v "// eslint-disable" | grep -v "eslint-disable-next-line" | wc -l)
|
|
|
|
if [ "$ANY_COUNT" -eq 0 ]; then
|
|
print_status "No 'any' types found in source code"
|
|
else
|
|
print_warning "Found $ANY_COUNT instances of 'any' type usage"
|
|
echo ""
|
|
echo "Instances found:"
|
|
grep -r "any" src/ --include="*.ts" --include="*.vue" | grep -v "// eslint-disable" | grep -v "eslint-disable-next-line" || true
|
|
echo ""
|
|
print_error "Please replace 'any' types with proper TypeScript types before committing"
|
|
exit 1
|
|
fi
|
|
|
|
# Step 4: Verify database migration status
|
|
print_status "Checking database migration status..."
|
|
if grep -r "databaseUtil" src/ --include="*.ts" --include="*.vue" > /dev/null 2>&1; then
|
|
print_warning "Found databaseUtil imports - ensure migration is complete"
|
|
echo ""
|
|
echo "Files with databaseUtil imports:"
|
|
grep -r "databaseUtil" src/ --include="*.ts" --include="*.vue" | head -5 || true
|
|
echo ""
|
|
print_warning "Consider completing database migration to PlatformServiceMixin"
|
|
else
|
|
print_status "No databaseUtil imports found - migration appears complete"
|
|
fi
|
|
|
|
# All checks passed
|
|
echo ""
|
|
print_status "All type safety checks passed! 🎉"
|
|
print_status "Your code is ready for commit"
|
|
echo ""
|
|
echo "📚 Remember to follow the Type Safety Guidelines:"
|
|
echo " - docs/typescript-type-safety-guidelines.md"
|
|
echo " - Use proper error handling patterns"
|
|
echo " - Leverage existing type definitions"
|
|
echo " - Run 'npm run lint-fix' for automatic fixes"
|
|
|
|
exit 0
|