{"_id":"@bereasoftware/email-validator","_rev":"4-e1c69454d538bcc38acca832631a745e","name":"@bereasoftware/email-validator","dist-tags":{"latest":"1.0.7"},"versions":{"1.0.4":{"name":"@bereasoftware/email-validator","version":"1.0.4","keywords":["email","validation","typescript","dns","rfc","laravel","vite"],"author":{"name":"John Andrade","email":"johnandrade@bereasoft.com"},"license":"MIT","_id":"@bereasoftware/email-validator@1.0.4","maintainers":[{"name":"kamuz0218","email":"sistemas@johnandrade.com"}],"dist":{"shasum":"cf24aece0c7a4b00c684eb0b25c9255e964dfe50","tarball":"https://registry.npmjs.org/@bereasoftware/email-validator/-/email-validator-1.0.4.tgz","fileCount":8,"integrity":"sha512-CYloRQ6q7qQlAQjFp9UryFTG8h0v5SPshAalbBHm4qynPZJODiE/+zXhJOGCB7gPY46ZrRFit+C+GkyMneXsXQ==","signatures":[{"sig":"MEYCIQDTsFHWHM3OWnxue0aLzZRjVU3QHZkZ95tq8/qL3zBd1gIhAOlUdXYCNtrPOnK+VQheLM3p/uGecgfp8eC0hRm6RHa+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108656},"main":"./dist/email-validator.cjs","type":"module","types":"./dist/types/index.d.ts","unpkg":"./dist/email-validator.umd.js","module":"./dist/email-validator.es.js","browser":{"./dist/email-validator.umd.js":"./dist/email-validator.umd.js","./dist/email-validator.iife.js":"./dist/email-validator.iife.js"},"engines":{"npm":">=10.8.2","node":">=20.18.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/email-validator.es.js","require":"./dist/email-validator.cjs"},"./umd":{"types":"./dist/types/index.d.ts","import":"./dist/email-validator.umd.js","require":"./dist/email-validator.umd.js"},"./iife":{"types":"./dist/types/index.d.ts","import":"./dist/index.iife.js","require":"./dist/index.iife.js"}},"gitHead":"8aba5b7e965f359dac8e8dc54f41aa9b3809e451","scripts":{"dev":"vite","lint":"tsc --noEmit","test":"vitest run","build":"vite build","release":"standard-version","test:watch":"vitest","postrelease":"git push --follow-tags origin main && npm publish","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch"},"_npmUser":{"name":"kamuz0218","email":"sistemas@johnandrade.com"},"_npmVersion":"10.5.0","description":"A professional TypeScript email validation library inspired by Laravel's rules, bundled with Vite for ESM and CJS support.","directories":{},"_nodeVersion":"21.7.3","browserslist":["last 2 versions","not dead","not IE 11","> 1%"],"dependencies":{"standard-version":"^9.5.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^7.3.1","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.0","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/email-validator_1.0.4_1773375240357_0.6612458950714344","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@bereasoftware/email-validator","version":"1.0.5","keywords":["email","validation","typescript","dns","rfc","laravel","vite"],"author":{"name":"John Andrade","email":"johnandrade@bereasoft.com"},"license":"MIT","_id":"@bereasoftware/email-validator@1.0.5","maintainers":[{"name":"kamuz0218","email":"sistemas@johnandrade.com"}],"dist":{"shasum":"0d99301ff6c15c60d1b5fc7f566f405192b96964","tarball":"https://registry.npmjs.org/@bereasoftware/email-validator/-/email-validator-1.0.5.tgz","fileCount":8,"integrity":"sha512-Wje1jQsJ7SeTBK5TGa6u/uB6yzLaYAGml74dz8YjWjLZZyEuA+1yUpljDxEK2fcGz+44i9FoOIvsBpYS4WEVPQ==","signatures":[{"sig":"MEUCIQC8H47DpmAJ+wwYrXbQhJ9VqTwLpNKdR5tU81esh/doPgIgTHQOwxUlbIoVMZujQoKMF0pnpRZsW4Ujz4ky/rwkeUk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108757},"main":"./dist/email-validator.cjs","type":"module","types":"./dist/types/index.d.ts","unpkg":"./dist/email-validator.umd.js","module":"./dist/email-validator.es.js","browser":{"./dist/email-validator.umd.js":"./dist/email-validator.umd.js","./dist/email-validator.iife.js":"./dist/email-validator.iife.js"},"engines":{"npm":">=10.8.2","node":">=20.18.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/email-validator.es.js","require":"./dist/email-validator.cjs"},"./umd":{"types":"./dist/types/index.d.ts","import":"./dist/email-validator.umd.js","require":"./dist/email-validator.umd.js"},"./iife":{"types":"./dist/types/index.d.ts","import":"./dist/index.iife.js","require":"./dist/index.iife.js"}},"gitHead":"cf31325aaf0189f8c7545cf898e2acce2467d431","scripts":{"dev":"vite","lint":"tsc --noEmit","test":"vitest run","build":"vite build","release":"standard-version","test:watch":"vitest","postrelease":"git push --follow-tags origin main && npm publish","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch"},"_npmUser":{"name":"kamuz0218","email":"sistemas@johnandrade.com"},"_npmVersion":"10.5.0","description":"A professional TypeScript email validation library inspired by Laravel's rules, bundled with Vite for ESM and CJS support.","directories":{},"_nodeVersion":"21.7.3","browserslist":["last 2 versions","not dead","not IE 11","> 1%"],"dependencies":{"standard-version":"^9.5.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^7.3.1","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.0","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/email-validator_1.0.5_1773376565587_0.05253084505917771","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@bereasoftware/email-validator","version":"1.0.6","keywords":["email","validation","typescript","dns","rfc","laravel","vite"],"author":{"name":"John Andrade","email":"johnandrade@bereasoft.com"},"license":"MIT","_id":"@bereasoftware/email-validator@1.0.6","maintainers":[{"name":"kamuz0218","email":"sistemas@johnandrade.com"}],"dist":{"shasum":"7943b8741ce5dbb2488f048ac995607944be6cc5","tarball":"https://registry.npmjs.org/@bereasoftware/email-validator/-/email-validator-1.0.6.tgz","fileCount":8,"integrity":"sha512-IuymQpvjnDtdvxjbdfqIbzHclQ191o9S9WAEn1/1NgHu8UNCwwnCzw+zLhqdNX28iIUyEtYl0qCh4J3FwcOWMA==","signatures":[{"sig":"MEYCIQCT0KNb5syFEjQ7g35qkiVv0L6hPSjcSXdFHR+GepuHYwIhAPoI2aTdx+17pFaBlvjJfjW8CELyuJmf+TDc3Yp9i/2W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109294},"main":"./dist/email-validator.cjs","type":"module","types":"./dist/types/index.d.ts","unpkg":"./dist/email-validator.umd.js","module":"./dist/email-validator.es.js","browser":{"./dist/email-validator.umd.js":"./dist/email-validator.umd.js","./dist/email-validator.iife.js":"./dist/email-validator.iife.js"},"engines":{"npm":">=10.8.2","node":">=20.18.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/email-validator.es.js","require":"./dist/email-validator.cjs"},"./umd":{"types":"./dist/types/index.d.ts","import":"./dist/email-validator.umd.js","require":"./dist/email-validator.umd.js"},"./iife":{"types":"./dist/types/index.d.ts","import":"./dist/index.iife.js","require":"./dist/index.iife.js"}},"gitHead":"a0ba5d43566cbcb814eebdf264631e73d178fc39","scripts":{"dev":"vite","lint":"tsc --noEmit","test":"vitest run","build":"vite build","release":"standard-version","test:watch":"vitest","postrelease":"git push --follow-tags origin main && npm publish","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch"},"_npmUser":{"name":"kamuz0218","email":"sistemas@johnandrade.com"},"_npmVersion":"10.5.0","description":"A professional TypeScript email validation library inspired by Laravel's rules, bundled with Vite for ESM and CJS support.","directories":{},"_nodeVersion":"21.7.3","browserslist":["last 2 versions","not dead","not IE 11","> 1%"],"dependencies":{"standard-version":"^9.5.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^7.3.1","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.0","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/email-validator_1.0.6_1773376905382_0.7388434099283334","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@bereasoftware/email-validator","version":"1.0.7","type":"module","main":"./dist/email-validator.cjs","module":"./dist/email-validator.es.js","types":"./dist/types/index.d.ts","unpkg":"./dist/email-validator.umd.js","browser":{"./dist/email-validator.umd.js":"./dist/email-validator.umd.js","./dist/email-validator.iife.js":"./dist/email-validator.iife.js"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/email-validator.es.js","require":"./dist/email-validator.cjs"},"./umd":{"types":"./dist/types/index.d.ts","import":"./dist/email-validator.umd.js","require":"./dist/email-validator.umd.js"},"./iife":{"types":"./dist/types/index.d.ts","import":"./dist/index.iife.js","require":"./dist/index.iife.js"}},"publishConfig":{"registry":"https://registry.npmjs.org/","access":"public"},"scripts":{"dev":"vite","build":"vite build","test":"vitest run","test:watch":"vitest","release":"standard-version","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","postrelease":"git push --follow-tags origin main && npm publish","lint":"tsc --noEmit"},"keywords":["email","validation","typescript","dns","rfc","laravel","vite"],"author":{"name":"John Andrade","email":"johnandrade@bereasoft.com"},"license":"MIT","description":"A professional TypeScript email validation library inspired by Laravel's rules, bundled with Vite for ESM and CJS support.","maintainers":[{"name":"kamuz0218","email":"sistemas@johnandrade.com"}],"repository":{"type":"git","url":"git+https://github.com/Berea-Soft/email-validator.git"},"bugs":{"url":"https://github.com/Berea-Soft/email-validator/issues"},"engines":{"node":">=20.18.0","npm":">=10.8.2"},"browserslist":["last 2 versions","not dead","not IE 11","> 1%"],"devDependencies":{"@types/node":"^25.3.0","tsx":"^4.21.0","typescript":"^5.9.3","vite":"^7.3.1","vite-plugin-dts":"^4.5.4","vitest":"^4.0.18","standard-version":"^9.5.0"},"_id":"@bereasoftware/email-validator@1.0.7","gitHead":"7ee82d77735df8acfa819587f52a6fab583f36d3","homepage":"https://github.com/Berea-Soft/email-validator#readme","_nodeVersion":"22.22.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-bcO56N6k3Cm29Co0x51CfWYTFtv+aIBa7+cHcok8GaU4FTt6CpvMMxDO8D/k43hsArhc3+A5yo9QUGz0UjElew==","shasum":"ae3ffacf3e64cdeb0b5aca46b36c4d51c053f4a9","tarball":"https://registry.npmjs.org/@bereasoftware/email-validator/-/email-validator-1.0.7.tgz","fileCount":8,"unpackedSize":109864,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGvZrisrqP6tSHnejJoAJ9Sn7wgkj6RgeR458/F/7NV/AiAU4L8shgICmNl4mNyO7kY+JlMq9060CjAsB1CsEesA8Q=="}]},"_npmUser":{"name":"kamuz0218","email":"sistemas@johnandrade.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/email-validator_1.0.7_1773717555412_0.6718887385895382"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-13T04:14:00.244Z","modified":"2026-03-17T03:19:15.703Z","1.0.4":"2026-03-13T04:14:00.511Z","1.0.5":"2026-03-13T04:36:05.724Z","1.0.6":"2026-03-13T04:41:45.535Z","1.0.7":"2026-03-17T03:19:15.572Z"},"author":{"name":"John Andrade","email":"johnandrade@bereasoft.com"},"license":"MIT","keywords":["email","validation","typescript","dns","rfc","laravel","vite"],"description":"A professional TypeScript email validation library inspired by Laravel's rules, bundled with Vite for ESM and CJS support.","maintainers":[{"name":"kamuz0218","email":"sistemas@johnandrade.com"}],"readme":"# Email Validator\n\n**Una librería TypeScript para validación de emails, inspirada en el robusto sistema de validación de Laravel.**\n\n[![NPM version](https://img.shields.io/npm/v/@bereasoftware/email-validator?style=for-the-badge)](https://www.npmjs.com/package/@bereasoftware/email-validator)\n[![NPM downloads](https://img.shields.io/npm/dm/@bereasoftware/email-validator?style=for-the-badge)](https://www.npmjs.com/package/@bereasoftware/email-validator)\n[![CI](https://img.shields.io/github/actions/workflow/status/Berea-Soft/email-validator/ci.yml?style=for-the-badge)](https://github.com/Berea-Soft/email-validator/actions/workflows/ci.yml)\n[![Node](https://img.shields.io/node/v/@bereasoftware/email-validator?style=for-the-badge)](https://www.npmjs.com/package/@bereasoftware/email-validator)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6?style=for-the-badge)](https://www.typescriptlang.org/)\n[![License](https://img.shields.io/github/license/Berea-Soft/email-validator?style=for-the-badge)](https://github.com/Berea-Soft/email-validator/blob/main/LICENSE)\n[![Last commit](https://img.shields.io/github/last-commit/Berea-Soft/email-validator?style=for-the-badge)](https://github.com/Berea-Soft/email-validator/commits/main)\n[![Repository](https://img.shields.io/badge/github-repo-blue?logo=github&style=for-the-badge)](https://github.com/Berea-Soft/email-validator)\n[![Coverage](https://img.shields.io/badge/coverage-95%25-orange?style=for-the-badge)](https://github.com/Berea-Soft/email-validator)\n\n`@bereasoftware/email-validator` proporciona una solución completa y tipada para validar direcciones de email en entornos TypeScript, tanto en **Node.js** como en el **navegador**. Replica la funcionalidad y las reglas del popular validador de Laravel, incluyendo soporte para validación de sintaxis RFC, DNS (registros MX), y detección de spoofing.\n\n## Características\n\n- **Validación por Reglas**: Implementa las reglas de validación de email de Laravel:\n  - `rfc`: Validación de sintaxis según RFC 5321 y 5322.\n  - `strict`: Modo RFC estricto que rechaza advertencias y formatos obsoletos.\n  - `dns`: Verifica la existencia de registros **MX** (o A/AAAA como fallback) en el DNS del dominio.\n  - `spoof`: Detecta caracteres Unicode homógrafos y engañosos para prevenir ataques de spoofing.\n  - `filter`: Una validación más simple y rápida, similar a la función `filter_var` de PHP.\n- **API Flexible**: Ofrece múltiples formas de uso:\n  - Una **API orientada a objetos** para un control detallado.\n  - Una **API fluida** y encadenable, inspirada en `Rule::email()` de Laravel 12.\n  - **Funciones de conveniencia** para validaciones rápidas.\n- **Soporte Universal (Isomórfico)**: La validación DNS funciona tanto en **Node.js** (usando el módulo nativo `dns`) como en el **navegador** y **entornos Edge** (usando DNS-over-HTTPS).\n- **Tipado Estricto con TypeScript**: Totalmente escrito en TypeScript para ofrecer autocompletado y seguridad de tipos.\n- **Cero Dependencias**: No requiere ninguna dependencia externa de producción.\n\n---\n\n## Instalación\n\n```bash\npnpm add @bereasoftware/email-validator\n# o\nnpm install @bereasoftware/email-validator\n# o\nyarn add @bereasoftware/email-validator\n```\n\n---\n\n## Guía de Uso\n\n### 1. API Fluida (Recomendada)\n\nLa forma más sencilla y expresiva de usar la librería es a través de la API fluida, que permite encadenar las reglas de validación deseadas.\n\n```typescript\nimport { email } from '@bereasoftware/email-validator';\n\n// --- Validación Asíncrona (con DNS) ---\n\n// Equivalente a 'email:rfc,dns,spoof' en Laravel\nconst result = await email()\n  .rfcCompliant()          // Añade validación RFC 5322\n  .validateMxRecord()      // Añade validación de registros MX en DNS\n  .preventSpoofing()       // Añade detección de spoofing\n  .validateAsync('user@gmail.com');\n\nif (result.valid) {\n  console.log('El email es válido y el dominio acepta correo.');\n} else {\n  console.error('Errores:', result.errors);\n}\n\n// --- Validación Síncrona (sin DNS) ---\n\n// Equivalente a 'email:rfc,strict'\nconst syncResult = email()\n  .rfcCompliant({ strict: true }) // Modo RFC estricto\n  .validate('user@example.com');\n\nconsole.log(syncResult.valid); // true\n```\n\n### 2. Clase `EmailValidator` (Orientada a Objetos)\n\nPara un control más programático, puedes instanciar la clase `EmailValidator` y pasarle las reglas en el constructor o en cada llamada.\n\n```typescript\nimport { EmailValidator } from '@bereasoftware/email-validator';\n\n// Crear una instancia con reglas por defecto\nconst validator = new EmailValidator({ rules: ['rfc', 'dns'] });\n\n// Validar de forma asíncrona\nconst result = await validator.validateAsync('user@gmail.com');\n\nif (!result.valid) {\n  console.log(result.errors[0].message);\n}\n\n// Validar de forma síncrona (ignora la regla 'dns')\nconst syncResult = validator.validate('user@example.com', ['rfc', 'filter']);\nconsole.log(syncResult.valid);\n```\n\n### 3. Funciones de Conveniencia\n\nPara validaciones rápidas donde solo necesitas un resultado booleano.\n\n```typescript\nimport { isValidEmail, isValidEmailAsync } from '@bereasoftware/email-validator';\n\n// Síncrono (solo sintaxis RFC por defecto)\nif (isValidEmail('user@example.com')) {\n  console.log('Formato válido.');\n}\n\n// Asíncrono (con DNS por defecto)\nif (await isValidEmailAsync('user@gmail.com')) {\n  console.log('Formato y DNS válidos.');\n}\n\n// Con reglas personalizadas\nconst isValidStrict = isValidEmail('\"user\"@example.com', ['strict']); // false\nconst isValidRfc = isValidEmail('\"user\"@example.com', ['rfc']);       // true\n```\n\n---\n\n## Reglas de Validación en Detalle\n\n| Regla | Descripción | Equivalente Laravel | Síncrona | Asíncrona |\n| :--- | :--- | :--- | :---: | :---: |\n| `rfc` | Valida la sintaxis del email según los estándares RFC 5321 y 5322. Es la base para la mayoría de las validaciones. | `email:rfc` | ✅ | ✅ |\n| `strict` | Extiende `rfc` y rechaza formatos válidos pero considerados malas prácticas, como partes locales entre comillas o comentarios. | `email:strict` | ✅ | ✅ |\n| `dns` | Verifica que el dominio del email tenga registros DNS válidos (MX, A o AAAA). **Requiere una llamada asíncrona.** | `email:dns` | ❌ | ✅ |\n| `spoof` | Detecta si el email contiene caracteres Unicode que se parecen a otros (homógrafos), previniendo ataques de phishing. | `email:spoof` | ✅ | ✅ |\n| `filter` | Una validación más simple y rápida basada en una expresión regular que emula el comportamiento de `filter_var` en PHP. | `email:filter` | ✅ | ✅ |\n\n---\n\n## El Objeto `EmailValidationResult`\n\nTodas las funciones de validación retornan un objeto `EmailValidationResult` con la siguiente estructura:\n\n```typescript\ninterface EmailValidationResult {\n  /** Indica si el email es válido según todas las reglas aplicadas */\n  valid: boolean;\n\n  /** Email evaluado */\n  email: string;\n\n  /** Array de errores encontrados (vacío si es válido) */\n  errors: EmailValidationError[];\n\n  /** Array de advertencias (el email puede ser válido pero con observaciones) */\n  warnings: EmailValidationWarning[];\n\n  /** Reglas que se aplicaron durante la validación */\n  appliedRules: EmailValidationRule[];\n\n  /** Partes descompuestas del email (si la sintaxis es válida) */\n  parts?: {\n    local: string;\n    domain: string;\n    isQuoted: boolean;\n    isIPLiteral: boolean;\n  };\n}\n```\n\nUn email se considera **inválido** si falla **cualquiera** de las reglas aplicadas. Las advertencias (como la ausencia de un registro MX cuando existe un registro A) no invalidan el email, pero se proporcionan para un análisis más profundo.\n\n---\n\n## API de Referencia\n\n### `email()`\n\nCrea un `EmailValidationBuilder` para la API fluida.\n\n- `.rfcCompliant(options?: { strict?: boolean })`: Añade la regla `rfc` o `strict`.\n- `.validateMxRecord(timeoutMs?: number)`: Añade la regla `dns`.\n- `.preventSpoofing()`: Añade la regla `spoof`.\n- `.filterValidation()`: Añade la regla `filter`.\n- `.validate(email: string)`: Ejecuta la validación síncrona.\n- `.validateAsync(email: string)`: Ejecuta la validación asíncrona.\n\n### `EmailValidator`\n\n- `constructor(options?: EmailValidatorOptions)`\n- `validate(email: string, rules?: EmailValidationRule[]): EmailValidationResult`\n- `validateAsync(email: string, rules?: EmailValidationRule[]): Promise<EmailValidationResult>`\n\n### `isValidEmail()`\n\n- `isValidEmail(email: string, rules?: EmailValidationRule[]): boolean`\n\n### `isValidEmailAsync()`\n\n- `isValidEmailAsync(email: string, rules?: EmailValidationRule[]): Promise<boolean>`\n\n---\n\n## Contribuciones\n\nLas contribuciones son bienvenidas. Por favor, abre un *issue* para discutir los cambios propuestos o envía un *pull request*.\n\n### Ejecutar Pruebas\n\n```bash\n# Instalar dependencias\npnpm install\n\n# Ejecutar todas las pruebas\npnpm test\n\n# Ejecutar pruebas en modo watch\npnpm run test:watch\n```\n\n## TDD, BDD y SOLID en este proyecto\n\nEste repositorio ya está organizado para trabajar con prácticas de calidad de forma continua.\n\n### TDD (Red -> Green -> Refactor)\n\n1. Escribe primero un test en `tests/email-validator.test.ts` que falle (`Red`).\n2. Implementa lo mínimo en `src/validators/*` o `src/EmailValidator.ts` para pasarlo (`Green`).\n3. Refactoriza manteniendo todos los tests en verde (`Refactor`).\n\nComandos recomendados:\n\n```bash\npnpm run test:watch\npnpm run lint\n```\n\n### BDD (Given / When / Then)\n\nLos escenarios de negocio se expresan en pruebas con nombres orientados a comportamiento.\n\nEjemplo:\n\n- `Given un dominio inexistente, When aplico rfc+dns, Then retorna NO_DNS_RECORD`\n\nEsto permite discutir requisitos con lenguaje funcional antes de entrar en detalles de implementación.\n\n### SOLID (aplicación práctica)\n\n- `S`: cada validador (`RFCValidator`, `DNSValidator`, etc.) tiene una sola responsabilidad.\n- `O`: `EmailValidator` usa registro de estrategias para extender reglas sin modificar lógica central.\n- `L`: todas las estrategias respetan contratos tipados (`IEmailValidationStrategy`, `IAsyncEmailValidationStrategy`).\n- `I`: interfaces separadas para validación síncrona y asíncrona.\n- `D`: `EmailValidator` permite inyección de dependencias mediante `EmailValidatorDependencies` para desacoplar infraestructura y facilitar pruebas.\n\n## Licencia\n\nEste proyecto está bajo la **Licencia MIT**.\n","readmeFilename":"README.md","homepage":"https://github.com/Berea-Soft/email-validator#readme","repository":{"type":"git","url":"git+https://github.com/Berea-Soft/email-validator.git"},"bugs":{"url":"https://github.com/Berea-Soft/email-validator/issues"}}