@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
TypeScript
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