Files
puaros/packages/guardian/examples/good-architecture/domain/specifications/EmailSpecification.ts
imfozilbek 03705b5264 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.
2025-11-24 02:54:39 +05:00

53 lines
1.4 KiB
TypeScript

import { Specification } from "./Specification"
import { Email } from "../value-objects/Email"
/**
* Email Domain Specification
*
* Business Rule: Check if email is from corporate domain
*/
export class CorporateEmailSpecification extends Specification<Email> {
private static readonly CORPORATE_DOMAINS = ["company.com", "corp.company.com"]
public isSatisfiedBy(email: Email): boolean {
const domain = email.getDomain()
return CorporateEmailSpecification.CORPORATE_DOMAINS.includes(domain)
}
}
/**
* Email Blacklist Specification
*
* Business Rule: Check if email domain is blacklisted
*/
export class BlacklistedEmailSpecification extends Specification<Email> {
private static readonly BLACKLISTED_DOMAINS = [
"tempmail.com",
"throwaway.email",
"guerrillamail.com",
]
public isSatisfiedBy(email: Email): boolean {
const domain = email.getDomain()
return BlacklistedEmailSpecification.BLACKLISTED_DOMAINS.includes(domain)
}
}
/**
* Valid Email for Registration
*
* Composed specification: not blacklisted
*/
export class ValidEmailForRegistrationSpecification extends Specification<Email> {
private readonly notBlacklisted: Specification<Email>
constructor() {
super()
this.notBlacklisted = new BlacklistedEmailSpecification().not()
}
public isSatisfiedBy(email: Email): boolean {
return this.notBlacklisted.isSatisfiedBy(email)
}
}