Initial commit: add .gitignore and README
This commit is contained in:
147
utils/deps-analyze.sh
Executable file
147
utils/deps-analyze.sh
Executable file
@@ -0,0 +1,147 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Load shared libraries
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$SCRIPT_DIR/../lib/init.sh"
|
||||
|
||||
# Dependency Analysis Script
|
||||
# Analyzes all package.json files and identifies common dependencies
|
||||
|
||||
set -e
|
||||
|
||||
echo "🔍 Analyzing dependencies across all projects..."
|
||||
|
||||
OUTPUT_DIR="reports"
|
||||
OUTPUT_FILE="$OUTPUT_DIR/dependency-analysis.md"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
|
||||
# Temporary files
|
||||
TEMP_DEPS="/tmp/all-deps.txt"
|
||||
TEMP_DEV_DEPS="/tmp/all-dev-deps.txt"
|
||||
|
||||
# Clear temp files
|
||||
> "$TEMP_DEPS"
|
||||
> "$TEMP_DEV_DEPS"
|
||||
|
||||
# Extract dependencies from all package.json files
|
||||
echo "📋 Extracting dependencies..."
|
||||
|
||||
find . -name "package.json" -type f ! -path "*/node_modules/*" ! -path "*/.git/*" ! -path "*/dist/*" ! -path "*/build/*" | while read -r file; do
|
||||
project=$(dirname "$file" | sed 's|^\./||')
|
||||
|
||||
# Extract dependencies
|
||||
if command -v jq &> /dev/null; then
|
||||
jq -r '.dependencies // {} | keys[]' "$file" 2>/dev/null | while read -r dep; do
|
||||
echo "$dep|$project" >> "$TEMP_DEPS"
|
||||
done
|
||||
|
||||
jq -r '.devDependencies // {} | keys[]' "$file" 2>/dev/null | while read -r dep; do
|
||||
echo "$dep|$project" >> "$TEMP_DEV_DEPS"
|
||||
done
|
||||
else
|
||||
# Fallback: basic grep extraction (less accurate)
|
||||
grep -o '"[^"]*":\s*"[^"]*"' "$file" | grep -v ":" | sed 's/"//g' | while read -r dep; do
|
||||
echo "$dep|$project" >> "$TEMP_DEPS"
|
||||
done
|
||||
fi
|
||||
done
|
||||
|
||||
# Generate report
|
||||
cat > "$OUTPUT_FILE" << 'EOF'
|
||||
# Dependency Analysis Report
|
||||
|
||||
**Generated**: $(date)
|
||||
**Purpose**: Identify common dependencies across all projects
|
||||
|
||||
## Summary
|
||||
|
||||
This report analyzes dependencies across all projects in the workspace.
|
||||
|
||||
## Common Dependencies
|
||||
|
||||
### Most Frequently Used Dependencies
|
||||
|
||||
EOF
|
||||
|
||||
# Count and sort dependencies
|
||||
echo "📊 Generating dependency statistics..."
|
||||
|
||||
if [ -f "$TEMP_DEPS" ]; then
|
||||
echo "### Production Dependencies" >> "$OUTPUT_FILE"
|
||||
echo "" >> "$OUTPUT_FILE"
|
||||
echo "| Dependency | Usage Count | Projects |" >> "$OUTPUT_FILE"
|
||||
echo "|------------|-------------|----------|" >> "$OUTPUT_FILE"
|
||||
|
||||
sort "$TEMP_DEPS" | cut -d'|' -f1 | uniq -c | sort -rn | head -20 | while read -r count dep; do
|
||||
projects=$(grep "^$dep|" "$TEMP_DEPS" | cut -d'|' -f2 | sort -u | tr '\n' ', ' | sed 's/,$//')
|
||||
echo "| $dep | $count | $projects |" >> "$OUTPUT_FILE"
|
||||
done
|
||||
echo "" >> "$OUTPUT_FILE"
|
||||
fi
|
||||
|
||||
if [ -f "$TEMP_DEV_DEPS" ]; then
|
||||
echo "### Development Dependencies" >> "$OUTPUT_FILE"
|
||||
echo "" >> "$OUTPUT_FILE"
|
||||
echo "| Dependency | Usage Count | Projects |" >> "$OUTPUT_FILE"
|
||||
echo "|------------|-------------|----------|" >> "$OUTPUT_FILE"
|
||||
|
||||
sort "$TEMP_DEV_DEPS" | cut -d'|' -f1 | uniq -c | sort -rn | head -20 | while read -r count dep; do
|
||||
projects=$(grep "^$dep|" "$TEMP_DEV_DEPS" | cut -d'|' -f2 | sort -u | tr '\n' ', ' | sed 's/,$//')
|
||||
echo "| $dep | $count | $projects |" >> "$OUTPUT_FILE"
|
||||
done
|
||||
echo "" >> "$OUTPUT_FILE"
|
||||
fi
|
||||
|
||||
cat >> "$OUTPUT_FILE" << EOF
|
||||
|
||||
## Recommendations
|
||||
|
||||
### Candidates for Shared Packages
|
||||
|
||||
Based on usage frequency, these dependencies are good candidates for hoisting to workspace root or shared packages:
|
||||
|
||||
1. **TypeScript/JavaScript Tooling**:
|
||||
- typescript
|
||||
- eslint
|
||||
- prettier
|
||||
- @typescript-eslint/*
|
||||
|
||||
2. **Testing**:
|
||||
- vitest / jest
|
||||
- @testing-library/*
|
||||
|
||||
3. **Utilities**:
|
||||
- zod (validation)
|
||||
- dotenv (configuration)
|
||||
- date-fns (date handling)
|
||||
|
||||
4. **Blockchain/Solidity**:
|
||||
- ethers / viem
|
||||
- @openzeppelin/contracts
|
||||
- foundry (dev dependency)
|
||||
|
||||
### Version Consolidation
|
||||
|
||||
Review and consolidate versions for:
|
||||
- Common dependencies with version mismatches
|
||||
- Outdated dependencies
|
||||
- Security vulnerabilities
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. Create shared packages for common utilities
|
||||
2. Hoist common devDependencies to workspace root
|
||||
3. Consolidate dependency versions
|
||||
4. Set up automated dependency updates (Dependabot)
|
||||
|
||||
---
|
||||
|
||||
**Generated**: $(date)
|
||||
EOF
|
||||
|
||||
echo "✅ Dependency analysis complete!"
|
||||
echo "📄 Report saved to: $OUTPUT_FILE"
|
||||
|
||||
# Cleanup
|
||||
rm -f "$TEMP_DEPS" "$TEMP_DEV_DEPS"
|
||||
|
||||
Reference in New Issue
Block a user