mirror of
https://github.com/samiyev/puaros.git
synced 2025-12-27 23:06:54 +05:00
Add @puaros/guardian package v0.1.0 - code quality guardian for vibe coders and enterprise teams. Features: - Hardcode detection (magic numbers, magic strings) - Circular dependency detection - Naming convention enforcement (Clean Architecture) - Architecture violation detection - CLI tool with comprehensive reporting - 159 tests with 80%+ coverage - Smart suggestions for fixes - Built for AI-assisted development Built with Clean Architecture and DDD principles. Works with Claude, GPT, Copilot, Cursor, and any AI coding assistant.
59 lines
1.4 KiB
TypeScript
59 lines
1.4 KiB
TypeScript
/**
|
|
* BAD EXAMPLE: Entity Exposure
|
|
*
|
|
* Guardian should detect:
|
|
* ❌ Domain entity returned from controller
|
|
* ❌ No DTO layer
|
|
*
|
|
* Why bad:
|
|
* - Exposes internal structure
|
|
* - Breaking changes propagate to API
|
|
* - Can't version API independently
|
|
* - Security risk (password fields, etc.)
|
|
* - Violates Clean Architecture
|
|
*/
|
|
|
|
class User {
|
|
constructor(
|
|
public id: string,
|
|
public email: string,
|
|
public passwordHash: string,
|
|
public isAdmin: boolean,
|
|
) {}
|
|
}
|
|
|
|
export class BadUserController {
|
|
/**
|
|
* ❌ BAD: Returning domain entity directly!
|
|
*/
|
|
public async getUser(id: string): Promise<User> {
|
|
return new User(id, "user@example.com", "hashed_password_exposed!", true)
|
|
}
|
|
|
|
/**
|
|
* ❌ BAD: Accepting domain entity as input!
|
|
*/
|
|
public async updateUser(user: User): Promise<User> {
|
|
return user
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ✅ GOOD VERSION:
|
|
*
|
|
* // application/dtos/UserResponseDto.ts
|
|
* export interface UserResponseDto {
|
|
* readonly id: string
|
|
* readonly email: string
|
|
* // NO password, NO internal fields
|
|
* }
|
|
*
|
|
* // infrastructure/controllers/UserController.ts
|
|
* export class UserController {
|
|
* async getUser(id: string): Promise<UserResponseDto> {
|
|
* const user = await this.getUserUseCase.execute(id)
|
|
* return UserMapper.toDto(user) // Convert to DTO!
|
|
* }
|
|
* }
|
|
*/
|