UNPKG

@samiyev/guardian

Version:

Research-backed code quality guardian for AI-assisted development. Detects hardcodes, secrets, circular deps, framework leaks, entity exposure, and 9 architecture violations. Enforces Clean Architecture/DDD principles. Works with GitHub Copilot, Cursor, W

81 lines 4.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.analyzeProject = analyzeProject; const AnalyzeProject_1 = require("./application/use-cases/AnalyzeProject"); const FileScanner_1 = require("./infrastructure/scanners/FileScanner"); const CodeParser_1 = require("./infrastructure/parsers/CodeParser"); const HardcodeDetector_1 = require("./infrastructure/analyzers/HardcodeDetector"); const NamingConventionDetector_1 = require("./infrastructure/analyzers/NamingConventionDetector"); const FrameworkLeakDetector_1 = require("./infrastructure/analyzers/FrameworkLeakDetector"); const EntityExposureDetector_1 = require("./infrastructure/analyzers/EntityExposureDetector"); const DependencyDirectionDetector_1 = require("./infrastructure/analyzers/DependencyDirectionDetector"); const RepositoryPatternDetector_1 = require("./infrastructure/analyzers/RepositoryPatternDetector"); const AggregateBoundaryDetector_1 = require("./infrastructure/analyzers/AggregateBoundaryDetector"); const SecretDetector_1 = require("./infrastructure/analyzers/SecretDetector"); const AnemicModelDetector_1 = require("./infrastructure/analyzers/AnemicModelDetector"); const DuplicateValueTracker_1 = require("./infrastructure/analyzers/DuplicateValueTracker"); const constants_1 = require("./shared/constants"); /** * Analyzes a TypeScript/JavaScript project for code quality issues * * Detects hardcoded values (magic numbers and strings) and validates * Clean Architecture layer dependencies. * * @param options - Configuration for the analysis * @param options.rootDir - Root directory to analyze * @param options.include - File patterns to include (optional) * @param options.exclude - Directories to exclude (optional, defaults to node_modules, dist, build) * * @returns Analysis results including violations, metrics, and dependency graph * * @throws {Error} If analysis fails or project cannot be scanned * * @example * ```typescript * import { analyzeProject } from '@puaros/guardian' * * const result = await analyzeProject({ * rootDir: './src', * exclude: ['node_modules', 'dist', 'test'] * }) * * console.log(`Found ${result.hardcodeViolations.length} hardcoded values`) * console.log(`Found ${result.violations.length} architecture violations`) * console.log(`Analyzed ${result.metrics.totalFiles} files`) * ``` * * @example * ```typescript * // Check for hardcoded values only * const result = await analyzeProject({ rootDir: './src' }) * * result.hardcodeViolations.forEach(violation => { * console.log(`${violation.file}:${violation.line}`) * console.log(` Type: ${violation.type}`) * console.log(` Value: ${violation.value}`) * console.log(` Suggestion: ${violation.suggestion.constantName}`) * console.log(` Location: ${violation.suggestion.location}`) * }) * ``` */ async function analyzeProject(options) { const fileScanner = new FileScanner_1.FileScanner(); const codeParser = new CodeParser_1.CodeParser(); const hardcodeDetector = new HardcodeDetector_1.HardcodeDetector(); const namingConventionDetector = new NamingConventionDetector_1.NamingConventionDetector(); const frameworkLeakDetector = new FrameworkLeakDetector_1.FrameworkLeakDetector(); const entityExposureDetector = new EntityExposureDetector_1.EntityExposureDetector(); const dependencyDirectionDetector = new DependencyDirectionDetector_1.DependencyDirectionDetector(); const repositoryPatternDetector = new RepositoryPatternDetector_1.RepositoryPatternDetector(); const aggregateBoundaryDetector = new AggregateBoundaryDetector_1.AggregateBoundaryDetector(); const secretDetector = new SecretDetector_1.SecretDetector(); const anemicModelDetector = new AnemicModelDetector_1.AnemicModelDetector(); const duplicateValueTracker = new DuplicateValueTracker_1.DuplicateValueTracker(); const useCase = new AnalyzeProject_1.AnalyzeProject(fileScanner, codeParser, hardcodeDetector, namingConventionDetector, frameworkLeakDetector, entityExposureDetector, dependencyDirectionDetector, repositoryPatternDetector, aggregateBoundaryDetector, secretDetector, anemicModelDetector, duplicateValueTracker); const result = await useCase.execute(options); if (!result.success || !result.data) { throw new Error(result.error ?? constants_1.ERROR_MESSAGES.FAILED_TO_ANALYZE); } return result.data; } //# sourceMappingURL=api.js.map