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

60 lines 2.23 kB
import { IRepositoryPatternDetector } from "../../domain/services/RepositoryPatternDetectorService"; import { RepositoryViolation } from "../../domain/value-objects/RepositoryViolation"; /** * Detects Repository Pattern violations in the codebase * * This detector identifies violations where the Repository Pattern is not properly implemented: * 1. ORM-specific types in repository interfaces (domain should be ORM-agnostic) * 2. Concrete repository usage in use cases (violates dependency inversion) * 3. Repository instantiation with 'new' in use cases (should use DI) * 4. Non-domain method names in repositories (should use ubiquitous language) * * @example * ```typescript * const detector = new RepositoryPatternDetector() * * // Detect violations in a repository interface * const code = ` * interface IUserRepository { * findOne(query: Prisma.UserWhereInput): Promise<User> * } * ` * const violations = detector.detectViolations( * code, * 'src/domain/repositories/IUserRepository.ts', * 'domain' * ) * * // violations will contain ORM type violation * console.log(violations.length) // 1 * console.log(violations[0].violationType) // 'orm-type-in-interface' * ``` */ export declare class RepositoryPatternDetector implements IRepositoryPatternDetector { private readonly ormMatcher; private readonly methodValidator; private readonly fileAnalyzer; private readonly violationDetector; constructor(); /** * Detects all Repository Pattern violations in the given code */ detectViolations(code: string, filePath: string, layer: string | undefined): RepositoryViolation[]; /** * Checks if a type is an ORM-specific type */ isOrmType(typeName: string): boolean; /** * Checks if a method name follows domain language conventions */ isDomainMethodName(methodName: string): boolean; /** * Checks if a file is a repository interface */ isRepositoryInterface(filePath: string, layer: string | undefined): boolean; /** * Checks if a file is a use case */ isUseCase(filePath: string, layer: string | undefined): boolean; } //# sourceMappingURL=RepositoryPatternDetector.d.ts.map