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

77 lines 3.04 kB
import { IDependencyDirectionDetector } from "../../domain/services/IDependencyDirectionDetector"; import { DependencyViolation } from "../../domain/value-objects/DependencyViolation"; /** * Detects dependency direction violations between architectural layers * * This detector enforces Clean Architecture dependency rules: * - Domain → should not import from Application or Infrastructure * - Application → should not import from Infrastructure * - Infrastructure → can import from Application and Domain (allowed) * - Shared → can be imported by all layers (allowed) * * @example * ```typescript * const detector = new DependencyDirectionDetector() * * // Detect violations in domain file * const code = ` * import { PrismaClient } from '@prisma/client' * import { UserDto } from '../application/dtos/UserDto' * ` * const violations = detector.detectViolations(code, 'src/domain/entities/User.ts', 'domain') * * // violations will contain 1 violation for domain importing from application * console.log(violations.length) // 1 * console.log(violations[0].getMessage()) * // "Domain layer should not import from Application layer" * ``` */ export declare class DependencyDirectionDetector implements IDependencyDirectionDetector { private readonly dependencyRules; constructor(); /** * Detects dependency direction violations in the given code * * Analyzes import statements to identify violations of dependency rules * between architectural layers. * * @param code - Source code to analyze * @param filePath - Path to the file being analyzed * @param layer - The architectural layer of the file (domain, application, infrastructure, shared) * @returns Array of detected dependency direction violations */ detectViolations(code: string, filePath: string, layer: string | undefined): DependencyViolation[]; /** * Checks if an import violates dependency direction rules * * @param fromLayer - The layer that is importing * @param toLayer - The layer being imported * @returns True if the import violates dependency rules */ isViolation(fromLayer: string, toLayer: string): boolean; /** * Extracts the layer from an import path * * @param importPath - The import path to analyze * @returns The layer name if detected, undefined otherwise */ extractLayerFromImport(importPath: string): string | undefined; /** * Checks if the normalized path contains the layer pattern */ private containsLayerPattern; /** * Extracts import paths from a line of code * * Handles various import statement formats: * - import { X } from 'path' * - import X from 'path' * - import * as X from 'path' * - const X = require('path') * * @param line - A line of code to analyze * @returns Array of import paths found in the line */ private extractImports; } //# sourceMappingURL=DependencyDirectionDetector.d.ts.map