0.0.4 • Published 5 months ago

github-package-analyzer v0.0.4

Weekly downloads
-
License
MIT
Repository
-
Last release
5 months ago

GitHub Package Analyzer šŸ”

A powerful tool to analyze GitHub repositories for package implementation and code quality using the GitHub API and OpenAI's GPT models. Evaluate your dependencies, verify implementations, and get AI-powered suggestions for improvement.

✨ Features

  • šŸ“¦ Comprehensive Package Analysis

    • Scans package.json for declared dependencies
    • Verifies actual implementation in codebase
    • Custom pattern matching for different package types
    • Extensible package detection patterns
  • šŸ¤– AI-Powered Code Analysis

    • Code quality evaluation using OpenAI GPT models
    • Implementation quality scoring
    • Best practices validation
    • Security assessment
    • Performance optimization suggestions
  • šŸ“Š Detailed Reporting

    • Overall repository health score
    • Package-by-package analysis
    • Implementation quality metrics
    • Actionable improvement suggestions
    • Letter grade assignments
  • šŸ”„ Repository Tools

    • Full repository structure traversal
    • Intelligent file filtering
    • Multi-file code analysis
    • Dependency validation

šŸ“„ Installation

npm install github-package-analyzer

āš™ļø Configuration

You'll need to provide authentication tokens:

const analyzer = new PackageAnalyzer({
    githubToken: process.env.GITHUB_TOKEN,  // GitHub Personal Access Token
    openaiKey: process.env.OPENAI_API_KEY   // OpenAI API Key
});

šŸš€ Usage

Basic Example

const PackageAnalyzer = require('github-package-analyzer');
const dotenv = require('dotenv');

dotenv.config();

async function main() {
    const analyzer = new PackageAnalyzer({
        githubToken: process.env.GITHUB_TOKEN,
        openaiKey: process.env.OPENAI_API_KEY
    });
    
    const result = await analyzer.analyze('owner', 'repo', ['react', 'express']);
    console.log(JSON.stringify(result, null, 2));
}

main().catch(console.error);

Extended Example with Custom Patterns

const PackageAnalyzer = require('github-package-analyzer');
const dotenv = require('dotenv');

dotenv.config();

async function analyzeFullStack() {
    // Define custom patterns for various frameworks and libraries
    const customPatterns = {
        'next': {
            filePatterns: ['.js', '.ts', '.jsx', '.tsx'],
            codePatterns: [
                'from "next"',
                'from "next/app"',
                'from "next/document"',
                'from "next/router"'
            ]
        },
        'prisma': {
            filePatterns: ['.ts', '.js'],
            codePatterns: [
                'from "@prisma/client"',
                'new PrismaClient',
                'prisma.$connect'
            ]
        },
        'tailwind': {
            filePatterns: ['.css', '.config.js'],
            codePatterns: [
                'tailwind.config',
                '@tailwind base',
                '@tailwind components',
                '@tailwind utilities'
            ]
        },
        'jest': {
            filePatterns: ['.test.js', '.spec.js', '.test.ts', '.spec.ts'],
            codePatterns: [
                'describe(',
                'test(',
                'it(',
                'expect(',
                'jest.mock'
            ]
        }
    };

    // Initialize analyzer with custom patterns
    const analyzer = new PackageAnalyzer({
        githubToken: process.env.GITHUB_TOKEN,
        openaiKey: process.env.OPENAI_API_KEY,
        patterns: customPatterns
    });

    try {
        // Analyze multiple aspects of a full-stack application
        const result = await analyzer.analyze(
            'owner',
            'repo',
            ['react', 'next', 'prisma', 'tailwind', 'jest']
        );

        // Generate detailed report
        console.log('Analysis Summary:');
        console.log('----------------');
        console.log(`Overall Grade: ${result.summary.grade}`);
        console.log(`Average Score: ${result.summary.averageScore}`);
        console.log('\nPackage Details:');
        
        result.details.dependencies.forEach(pkg => {
            console.log(`\n${pkg.package}:`);
            console.log(`  Installed: ${pkg.installed}`);
            console.log(`  Implemented: ${pkg.implementation}`);
            if (pkg.scores) {
                console.log(`  Code Quality: ${pkg.scores.codeQuality}`);
                console.log(`  Implementation Quality: ${pkg.scores.implementationQuality}`);
                console.log(`  Grade: ${pkg.grade}`);
            }
        });

        // Save detailed report to file
        const fs = require('fs');
        fs.writeFileSync(
            'analysis-report.json',
            JSON.stringify(result, null, 2)
        );

    } catch (error) {
        console.error('Analysis failed:', error);
    }
}

analyzeFullStack().catch(console.error);

šŸ“ Analysis Features

The analyzer performs multiple levels of analysis:

1. Dependency Validation

  • Checks package.json for required dependencies
  • Validates both regular and dev dependencies
  • Reports missing or outdated packages

2. Implementation Detection

  • Scans codebase for actual package usage
  • Supports multiple file extensions
  • Custom pattern matching for different import styles

3. Code Quality Analysis

  • Best practices adherence
  • Error handling patterns
  • Performance optimization opportunities
  • Security vulnerability detection
  • Code organization and structure

4. Implementation Quality

  • Feature utilization assessment
  • Integration pattern analysis
  • Configuration validation
  • Package-specific best practices
  • Code efficiency metrics

šŸ“Š Output Format

The analyzer generates detailed reports in the following structure:

{
    "passed": true,
    "summary": {
        "totalScore": 85,
        "averageScore": 85,
        "grade": "B"
    },
    "details": {
        "dependencies": [],
        "implementation": [],
        "codeQuality": [],
        "suggestions": []
    }
}

šŸŽÆ Supported Packages

Built-in analysis patterns for:

  • React
  • Express

Add custom patterns by extending the configuration:

const customPatterns = {
    'packageName': {
        filePatterns: ['.ext1', '.ext2'],
        codePatterns: ['import pattern', 'require pattern']
    }
};

šŸ¤ Contributing

Contributions are welcome! Please feel free to submit a Pull Request. See our contributing guidelines for more details.

šŸ“„ License

MIT License - see LICENSE file for details.

šŸ‘¤ Author

Tom Tarpey

šŸ”’ Security

āš ļø Important: Never commit API keys or tokens to version control. Use environment variables or secure configuration management for sensitive credentials.

šŸ“š Documentation

For detailed API documentation and advanced usage examples, visit our documentation.

0.0.4

5 months ago

0.0.3

5 months ago

0.0.2

5 months ago

0.0.1

5 months ago