feat(guardian): add guardian package - code quality analyzer

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.
This commit is contained in:
imfozilbek
2025-11-24 02:54:39 +05:00
parent 9f97509b06
commit 03705b5264
96 changed files with 9520 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
import { UserService } from "./UserService"
/**
* BAD EXAMPLE: Circular Dependency (part 2)
*
* OrderService -> UserService (creates cycle)
*/
export class OrderService {
constructor(private readonly userService: UserService) {}
public getOrdersByUser(userId: string): void {
console.warn(`Getting orders for user ${userId}`)
}
public calculateUserDiscount(userId: string): number {
const totalSpent = this.userService.getUserTotalSpent(userId)
return totalSpent > 1000 ? 0.1 : 0
}
}
/**
* ✅ GOOD VERSION:
*
* // interfaces/IOrderService.ts
* export interface IOrderService {
* getOrdersByUser(userId: string): Promise<Order[]>
* }
*
* // UserService.ts
* constructor(private readonly orderService: IOrderService) {}
*
* // OrderService.ts - no dependency on UserService
* // Use domain events or separate service for discount logic
*/

View File

@@ -0,0 +1,34 @@
import { OrderService } from "./OrderService"
/**
* BAD EXAMPLE: Circular Dependency
*
* UserService -> OrderService -> UserService
*
* Guardian should detect:
* ❌ Circular dependency cycle
*
* Why bad:
* - Tight coupling
* - Hard to test
* - Difficult to understand
* - Can cause initialization issues
* - Maintenance nightmare
*
* Fix:
* - Use interfaces
* - Use domain events
* - Extract shared logic to third service
*/
export class UserService {
constructor(private readonly orderService: OrderService) {}
public getUserOrders(userId: string): void {
console.warn(`Getting orders for user ${userId}`)
this.orderService.getOrdersByUser(userId)
}
public getUserTotalSpent(userId: string): number {
return 0
}
}