208 lines
6.0 KiB
Bash
Executable File
208 lines
6.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Next.js 16 - Version Checker
|
|
# Verifies that all dependencies are compatible with Next.js 16
|
|
|
|
set -e
|
|
|
|
echo "🔍 Checking Next.js 16 compatibility..."
|
|
echo ""
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Check if package.json exists
|
|
if [ ! -f "package.json" ]; then
|
|
echo -e "${RED}❌ package.json not found${NC}"
|
|
echo "Run this script from your project root directory."
|
|
exit 1
|
|
fi
|
|
|
|
# Check Node.js version
|
|
echo "📦 Node.js Version:"
|
|
NODE_VERSION=$(node --version | cut -d'v' -f2)
|
|
NODE_MAJOR=$(echo $NODE_VERSION | cut -d'.' -f1)
|
|
NODE_MINOR=$(echo $NODE_VERSION | cut -d'.' -f2)
|
|
|
|
if [ "$NODE_MAJOR" -lt 20 ]; then
|
|
echo -e "${RED}❌ Node.js $NODE_VERSION (requires 20.9+)${NC}"
|
|
echo " Upgrade: nvm install 20 && nvm use 20"
|
|
exit 1
|
|
elif [ "$NODE_MAJOR" -eq 20 ] && [ "$NODE_MINOR" -lt 9 ]; then
|
|
echo -e "${RED}❌ Node.js $NODE_VERSION (requires 20.9+)${NC}"
|
|
echo " Upgrade: nvm install 20 && nvm use 20"
|
|
exit 1
|
|
else
|
|
echo -e "${GREEN}✅ Node.js $NODE_VERSION${NC}"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# Check Next.js version
|
|
echo "🔧 Next.js Version:"
|
|
if [ -f "node_modules/next/package.json" ]; then
|
|
NEXT_VERSION=$(node -p "require('./node_modules/next/package.json').version")
|
|
NEXT_MAJOR=$(echo $NEXT_VERSION | cut -d'.' -f1)
|
|
|
|
if [ "$NEXT_MAJOR" -lt 16 ]; then
|
|
echo -e "${RED}❌ Next.js $NEXT_VERSION (requires 16.0.0+)${NC}"
|
|
echo " Upgrade: npm install next@16"
|
|
exit 1
|
|
else
|
|
echo -e "${GREEN}✅ Next.js $NEXT_VERSION${NC}"
|
|
fi
|
|
else
|
|
echo -e "${YELLOW}⚠️ Next.js not installed (run npm install)${NC}"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# Check React version
|
|
echo "⚛️ React Version:"
|
|
if [ -f "node_modules/react/package.json" ]; then
|
|
REACT_VERSION=$(node -p "require('./node_modules/react/package.json').version")
|
|
REACT_MAJOR=$(echo $REACT_VERSION | cut -d'.' -f1)
|
|
REACT_MINOR=$(echo $REACT_VERSION | cut -d'.' -f2)
|
|
|
|
if [ "$REACT_MAJOR" -lt 19 ]; then
|
|
echo -e "${RED}❌ React $REACT_VERSION (requires 19.2+)${NC}"
|
|
echo " Upgrade: npm install react@19.2 react-dom@19.2"
|
|
exit 1
|
|
elif [ "$REACT_MAJOR" -eq 19 ] && [ "$REACT_MINOR" -lt 2 ]; then
|
|
echo -e "${YELLOW}⚠️ React $REACT_VERSION (recommends 19.2+)${NC}"
|
|
echo " Upgrade: npm install react@19.2 react-dom@19.2"
|
|
else
|
|
echo -e "${GREEN}✅ React $REACT_VERSION${NC}"
|
|
fi
|
|
else
|
|
echo -e "${YELLOW}⚠️ React not installed (run npm install)${NC}"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# Check TypeScript version (if using TypeScript)
|
|
if [ -f "tsconfig.json" ]; then
|
|
echo "📘 TypeScript Version:"
|
|
if [ -f "node_modules/typescript/package.json" ]; then
|
|
TS_VERSION=$(node -p "require('./node_modules/typescript/package.json').version")
|
|
TS_MAJOR=$(echo $TS_VERSION | cut -d'.' -f1)
|
|
TS_MINOR=$(echo $TS_VERSION | cut -d'.' -f2)
|
|
|
|
if [ "$TS_MAJOR" -lt 5 ]; then
|
|
echo -e "${RED}❌ TypeScript $TS_VERSION (requires 5.1+)${NC}"
|
|
echo " Upgrade: npm install -D typescript@latest"
|
|
exit 1
|
|
elif [ "$TS_MAJOR" -eq 5 ] && [ "$TS_MINOR" -lt 1 ]; then
|
|
echo -e "${RED}❌ TypeScript $TS_VERSION (requires 5.1+)${NC}"
|
|
echo " Upgrade: npm install -D typescript@latest"
|
|
exit 1
|
|
else
|
|
echo -e "${GREEN}✅ TypeScript $TS_VERSION${NC}"
|
|
fi
|
|
else
|
|
echo -e "${YELLOW}⚠️ TypeScript not installed (run npm install)${NC}"
|
|
fi
|
|
|
|
echo ""
|
|
fi
|
|
|
|
# Check for deprecated files
|
|
echo "🔎 Checking for deprecated patterns..."
|
|
|
|
DEPRECATED_FOUND=0
|
|
|
|
if [ -f "middleware.ts" ]; then
|
|
echo -e "${YELLOW}⚠️ middleware.ts found (deprecated in Next.js 16)${NC}"
|
|
echo " Migrate: Rename to proxy.ts and update function name"
|
|
DEPRECATED_FOUND=1
|
|
fi
|
|
|
|
if [ -f "middleware.js" ]; then
|
|
echo -e "${YELLOW}⚠️ middleware.js found (deprecated in Next.js 16)${NC}"
|
|
echo " Migrate: Rename to proxy.js and update function name"
|
|
DEPRECATED_FOUND=1
|
|
fi
|
|
|
|
# Check for parallel routes missing default.js
|
|
if [ -d "app" ]; then
|
|
PARALLEL_ROUTES=$(find app -type d -name '@*' 2>/dev/null)
|
|
|
|
if [ ! -z "$PARALLEL_ROUTES" ]; then
|
|
for route in $PARALLEL_ROUTES; do
|
|
if [ ! -f "$route/default.tsx" ] && [ ! -f "$route/default.jsx" ] && [ ! -f "$route/default.js" ]; then
|
|
echo -e "${YELLOW}⚠️ $route missing default.tsx (required in Next.js 16)${NC}"
|
|
echo " Create: touch $route/default.tsx"
|
|
DEPRECATED_FOUND=1
|
|
fi
|
|
done
|
|
fi
|
|
fi
|
|
|
|
if [ $DEPRECATED_FOUND -eq 0 ]; then
|
|
echo -e "${GREEN}✅ No deprecated patterns found${NC}"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# Summary
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "📊 Summary:"
|
|
echo ""
|
|
|
|
ALL_GOOD=1
|
|
|
|
# Node.js check
|
|
if [ "$NODE_MAJOR" -ge 20 ] && [ "$NODE_MINOR" -ge 9 ]; then
|
|
echo -e "${GREEN}✅ Node.js compatible${NC}"
|
|
else
|
|
echo -e "${RED}❌ Node.js incompatible${NC}"
|
|
ALL_GOOD=0
|
|
fi
|
|
|
|
# Next.js check
|
|
if [ -f "node_modules/next/package.json" ]; then
|
|
if [ "$NEXT_MAJOR" -ge 16 ]; then
|
|
echo -e "${GREEN}✅ Next.js compatible${NC}"
|
|
else
|
|
echo -e "${RED}❌ Next.js incompatible${NC}"
|
|
ALL_GOOD=0
|
|
fi
|
|
fi
|
|
|
|
# React check
|
|
if [ -f "node_modules/react/package.json" ]; then
|
|
if [ "$REACT_MAJOR" -ge 19 ]; then
|
|
echo -e "${GREEN}✅ React compatible${NC}"
|
|
else
|
|
echo -e "${RED}❌ React incompatible${NC}"
|
|
ALL_GOOD=0
|
|
fi
|
|
fi
|
|
|
|
# TypeScript check (if applicable)
|
|
if [ -f "tsconfig.json" ] && [ -f "node_modules/typescript/package.json" ]; then
|
|
if [ "$TS_MAJOR" -ge 5 ] && [ "$TS_MINOR" -ge 1 ]; then
|
|
echo -e "${GREEN}✅ TypeScript compatible${NC}"
|
|
else
|
|
echo -e "${RED}❌ TypeScript incompatible${NC}"
|
|
ALL_GOOD=0
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
|
|
if [ $ALL_GOOD -eq 1 ] && [ $DEPRECATED_FOUND -eq 0 ]; then
|
|
echo -e "${GREEN}🎉 All checks passed! Your project is ready for Next.js 16.${NC}"
|
|
exit 0
|
|
elif [ $ALL_GOOD -eq 1 ]; then
|
|
echo -e "${YELLOW}⚠️ Dependencies compatible, but deprecated patterns found.${NC}"
|
|
echo "Fix deprecation warnings before migrating to Next.js 16."
|
|
exit 1
|
|
else
|
|
echo -e "${RED}❌ Compatibility issues found. Fix errors above before continuing.${NC}"
|
|
exit 1
|
|
fi
|