{"_id":"@bernierllc/vitest-email-testing","_rev":"6-a7ce321bd3781f04422a085535f4baa4","name":"@bernierllc/vitest-email-testing","dist-tags":{"latest":"1.4.0"},"versions":{"1.0.2":{"name":"@bernierllc/vitest-email-testing","version":"1.0.2","keywords":["vitest","email","testing","matchers","integration","typescript","concurrent","async"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/vitest-email-testing@1.0.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"d7a06b9ef8668797533885c3ebca30aaf6f1041f","tarball":"https://registry.npmjs.org/@bernierllc/vitest-email-testing/-/vitest-email-testing-1.0.2.tgz","fileCount":12,"integrity":"sha512-n5Ii3ieJEqAhiRYsp/tYQ8V1Oad7h0b5AABP4E//+e2C3NmRuCFGZyaRWVRJ72SyfwSU0ccQoWB+P2HmdEa8+Q==","signatures":[{"sig":"MEUCIQCiQgjIZ+JsKQSzBC+KorxTMkcEco3IycNiitxvJG9xTgIga/cC4SEvg0LmEDIuNOtO4lrmmD2E0EztwEfS4YoZVOU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73138},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","import":"./dist/setup.mjs","require":"./dist/setup.js"}},"gitHead":"33e4dea32a6cb4769fed419921505f52ce3e8576","scripts":{"lint":"eslint src --ext .ts","test":"vitest","build":"tsup src/index.ts src/setup.ts --format cjs,esm --dts --clean","test:run":"vitest run","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/integration/vitest-email-testing"},"_npmVersion":"11.6.2","description":"Vitest plugin and matchers for modern email testing with TypeScript support, concurrent testing, and async assertions","directories":{},"_nodeVersion":"25.2.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^8.54.0","vitest":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0","@vitest/coverage-v8":"^1.0.0","@typescript-eslint/parser":"^6.13.0","@typescript-eslint/eslint-plugin":"^6.13.0"},"peerDependencies":{"vitest":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vitest-email-testing_1.0.2_1764635128066_0.7566679957921485","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bernierllc/vitest-email-testing","version":"1.2.0","keywords":["vitest","email","testing","matchers","integration","typescript","concurrent","async"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/vitest-email-testing@1.2.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"b9e568c0dca957726063d198e9b274fba8b1212f","tarball":"https://registry.npmjs.org/@bernierllc/vitest-email-testing/-/vitest-email-testing-1.2.0.tgz","fileCount":12,"integrity":"sha512-V3B42aV8/gG1j/gMOAFP++7VSacxppB4F5SEGRaTLdBhKiY+WR2PgMlfrr2UOsFB7LqxQWpAt/BDX8hNrvsSwg==","signatures":[{"sig":"MEQCIGWTXDyvwqNuWTFqxJoFNnjOcdbMEY2yAwQkXHjnEvFqAiBfMOyBqKVG+EloUywrh1QgYVNXxtdR2dvNXwjmw5f0tw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73273},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","import":"./dist/setup.mjs","require":"./dist/setup.js"}},"gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","scripts":{"lint":"eslint src --ext .ts","test":"vitest","build":"tsup src/index.ts src/setup.ts --format cjs,esm --dts --clean","test:run":"vitest run","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d4e91799-e5a2-4929-855f-9ce9cafce9cf"}},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/integration/vitest-email-testing"},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"Vitest plugin and matchers for modern email testing with TypeScript support, concurrent testing, and async assertions","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^8.54.0","vitest":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0","@vitest/coverage-v8":"^1.0.0","@typescript-eslint/parser":"^6.13.0","@typescript-eslint/eslint-plugin":"^6.13.0"},"peerDependencies":{"vitest":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vitest-email-testing_1.2.0_1767642341699_0.7982073980543292","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@bernierllc/vitest-email-testing","version":"1.2.1","keywords":["vitest","email","testing","matchers","integration","typescript","concurrent","async"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/vitest-email-testing@1.2.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"dd4f532c2c68b4e56a88ab852f2c6283561a3f94","tarball":"https://registry.npmjs.org/@bernierllc/vitest-email-testing/-/vitest-email-testing-1.2.1.tgz","fileCount":12,"integrity":"sha512-i7T0PSBKe2eRQ+j9sK/NiUbO0TlrPFdoxuRDS6/PjVvihpkHfiWomkHCkyRJ/p/QUP2/G2TwYITE/lYh19q2aQ==","signatures":[{"sig":"MEQCIEKwD6VK8RdjwgMNwZcZSKH04ntnj+nqRB4yCIHSwSYAAiAZ7MZ0YpDLVbO9dZ00AJWeoBfHxQViaIoLyVRX0IEKcg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73215},"main":"dist/index.js","_from":"file:bernierllc-vitest-email-testing-1.2.1.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","import":"./dist/setup.mjs","require":"./dist/setup.js"}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest","build":"tsup src/index.ts src/setup.ts --format cjs,esm --dts --clean","test:run":"vitest run","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d4e91799-e5a2-4929-855f-9ce9cafce9cf"}},"_resolved":"/tmp/79d4276589f78191151691a0543804cf/bernierllc-vitest-email-testing-1.2.1.tgz","_integrity":"sha512-i7T0PSBKe2eRQ+j9sK/NiUbO0TlrPFdoxuRDS6/PjVvihpkHfiWomkHCkyRJ/p/QUP2/G2TwYITE/lYh19q2aQ==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/integration/vitest-email-testing"},"_npmVersion":"11.11.0","description":"Vitest plugin and matchers for modern email testing with TypeScript support, concurrent testing, and async assertions","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^8.54.0","vitest":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0","@vitest/coverage-v8":"^1.0.0","@typescript-eslint/parser":"^6.13.0","@typescript-eslint/eslint-plugin":"^6.13.0"},"peerDependencies":{"vitest":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vitest-email-testing_1.2.1_1773078105580_0.2913915742236066","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@bernierllc/vitest-email-testing","version":"1.2.2","keywords":["vitest","email","testing","matchers","integration","typescript","concurrent","async"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/vitest-email-testing@1.2.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"541bfed594662c850df829d309b5a7cc4d7d979e","tarball":"https://registry.npmjs.org/@bernierllc/vitest-email-testing/-/vitest-email-testing-1.2.2.tgz","fileCount":12,"integrity":"sha512-iuqwhYjpfn9/0yuEM3nXn1cFbmHAjkohpXIdZOlXn8B7BeLRfHtdaiCBwPb0j4TyY52ZL4zGiV9Qe3+o2vK+bQ==","signatures":[{"sig":"MEYCIQCnyi+L6ResaSCEMAFurCyUpFJ+bD0zN/k/rio7TP/6sgIhAK03wpajtYBrtHZfX/qdDmOFbjICArNQUuScEudij5SD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73215},"main":"dist/index.js","_from":"file:bernierllc-vitest-email-testing-1.2.2.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","import":"./dist/setup.mjs","require":"./dist/setup.js"}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest","build":"tsup src/index.ts src/setup.ts --format cjs,esm --dts --clean","test:run":"vitest run","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d4e91799-e5a2-4929-855f-9ce9cafce9cf"}},"_resolved":"/home/runner/work/tools/tools/packages/integration/vitest-email-testing/bernierllc-vitest-email-testing-1.2.2.tgz","_integrity":"sha512-iuqwhYjpfn9/0yuEM3nXn1cFbmHAjkohpXIdZOlXn8B7BeLRfHtdaiCBwPb0j4TyY52ZL4zGiV9Qe3+o2vK+bQ==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/integration/vitest-email-testing"},"_npmVersion":"11.11.0","description":"Vitest plugin and matchers for modern email testing with TypeScript support, concurrent testing, and async assertions","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^8.54.0","vitest":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0","@vitest/coverage-v8":"^1.0.0","@typescript-eslint/parser":"^6.13.0","@typescript-eslint/eslint-plugin":"^6.13.0"},"peerDependencies":{"vitest":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vitest-email-testing_1.2.2_1773163396106_0.13944124860711038","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@bernierllc/vitest-email-testing","version":"1.3.0","keywords":["vitest","email","testing","matchers","integration","typescript","concurrent","async"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/vitest-email-testing@1.3.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"76d7114aa2374aebf1dfc99d78893734f84dee5b","tarball":"https://registry.npmjs.org/@bernierllc/vitest-email-testing/-/vitest-email-testing-1.3.0.tgz","fileCount":12,"integrity":"sha512-gpwWZmzRd57HUnvmE+3cJ8vHvUucXD0/hc5kUPuanFZW94Cakm3qAMPiQaDzEfo/SIkFc9SqC2OH5vZEYeecEQ==","signatures":[{"sig":"MEQCIALyr+gfwg3LY8gpPuLN26gf7hg+Ajh0/QcJOKfPFz3YAiBBjsXGMyZZAU6GEHJ3gAJlUbHlyGc3S05EXurXUD9gVg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73215},"main":"dist/index.js","_from":"file:bernierllc-vitest-email-testing-1.3.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","import":"./dist/setup.mjs","require":"./dist/setup.js"}},"scripts":{"lint":"eslint src --ext .ts","test":"vitest","build":"tsup src/index.ts src/setup.ts --format cjs,esm --dts --clean","test:run":"vitest run","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d4e91799-e5a2-4929-855f-9ce9cafce9cf"}},"_resolved":"/home/runner/work/tools/tools/packages/integration/vitest-email-testing/bernierllc-vitest-email-testing-1.3.0.tgz","_integrity":"sha512-gpwWZmzRd57HUnvmE+3cJ8vHvUucXD0/hc5kUPuanFZW94Cakm3qAMPiQaDzEfo/SIkFc9SqC2OH5vZEYeecEQ==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/integration/vitest-email-testing"},"_npmVersion":"11.14.1","description":"Vitest plugin and matchers for modern email testing with TypeScript support, concurrent testing, and async assertions","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","eslint":"^8.54.0","vitest":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0","@vitest/coverage-v8":"^1.0.0","@typescript-eslint/parser":"^6.13.0","@typescript-eslint/eslint-plugin":"^6.13.0"},"peerDependencies":{"vitest":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vitest-email-testing_1.3.0_1779241527458_0.5275295234837396","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@bernierllc/vitest-email-testing","version":"1.4.0","description":"Vitest plugin and matchers for modern email testing with TypeScript support, concurrent testing, and async assertions","keywords":["vitest","email","testing","matchers","integration","typescript","concurrent","async"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","repository":{"type":"git","url":"git+https://github.com/bernierllc/tools.git","directory":"packages/integration/vitest-email-testing"},"main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./setup":{"types":"./dist/setup.d.ts","import":"./dist/setup.mjs","require":"./dist/setup.js"}},"devDependencies":{"@types/node":"^20.10.0","@typescript-eslint/eslint-plugin":"^6.13.0","@typescript-eslint/parser":"^6.13.0","@vitest/coverage-v8":"^1.0.0","eslint":"^8.54.0","tsup":"^8.0.0","typescript":"^5.3.0","vitest":"^1.0.0"},"peerDependencies":{"vitest":"^1.0.0"},"engines":{"node":">=18.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build":"tsup src/index.ts src/setup.ts --format cjs,esm --dts --clean","test":"vitest","test:run":"vitest run","test:coverage":"vitest run --coverage","lint":"eslint src --ext .ts","type-check":"tsc --noEmit"},"_id":"@bernierllc/vitest-email-testing@1.4.0","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"homepage":"https://github.com/bernierllc/tools#readme","_integrity":"sha512-TOjJbs99gvJpCOTW3Y7gj0caJb6/h9E/TxrFIdLz/CDFfyAOCDJ5oZK5TOBvC8kifBcTJCgYza1f12Mps0BYWg==","_resolved":"/home/runner/work/tools/tools/packages/integration/vitest-email-testing/bernierllc-vitest-email-testing-1.4.0.tgz","_from":"file:bernierllc-vitest-email-testing-1.4.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-TOjJbs99gvJpCOTW3Y7gj0caJb6/h9E/TxrFIdLz/CDFfyAOCDJ5oZK5TOBvC8kifBcTJCgYza1f12Mps0BYWg==","shasum":"24d88b1add8d4bb01dae94cdf42310084e725ce8","tarball":"https://registry.npmjs.org/@bernierllc/vitest-email-testing/-/vitest-email-testing-1.4.0.tgz","fileCount":12,"unpackedSize":73215,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBh1QWg30D9oaY4OSJOOEaiOoLRffuVgaZ78I1DO6r6ZAiEAjBIfAm2stBJSCBenGuAXd5bKcaFP7OQq7OvliqqrfOA="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d4e91799-e5a2-4929-855f-9ce9cafce9cf"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vitest-email-testing_1.4.0_1779250272712_0.7128481896072845"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-02T00:25:28.009Z","modified":"2026-05-20T04:11:13.018Z","1.0.2":"2025-12-02T00:25:28.266Z","1.2.0":"2026-01-05T19:45:41.841Z","1.2.1":"2026-03-09T17:41:45.716Z","1.2.2":"2026-03-10T17:23:16.266Z","1.3.0":"2026-05-20T01:45:27.593Z","1.4.0":"2026-05-20T04:11:12.862Z"},"bugs":{"url":"https://github.com/bernierllc/tools/issues"},"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","homepage":"https://github.com/bernierllc/tools#readme","keywords":["vitest","email","testing","matchers","integration","typescript","concurrent","async"],"repository":{"type":"git","url":"git+https://github.com/bernierllc/tools.git","directory":"packages/integration/vitest-email-testing"},"description":"Vitest plugin and matchers for modern email testing with TypeScript support, concurrent testing, and async assertions","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/vitest-email-testing\n\nVitest plugin and matchers for modern email testing with TypeScript support, concurrent testing, and async assertions.\n\n## Features\n\n- 🎯 **Custom Vitest Matchers** - Email-specific assertion matchers\n- ⚡ **Fast Test Execution** - Optimized for Vitest's speed\n- 🔄 **Concurrent Testing** - Safe parallel test execution\n- 📝 **TypeScript Support** - Full type safety\n- 🌐 **ES Module Support** - Native ESM compatibility\n- 🧪 **Async Assertions** - Promise-based email testing\n\n## Installation\n\n```bash\nnpm install --save-dev @bernierllc/vitest-email-testing\n```\n\n## Quick Start\n\n### Configure Vitest\n\n```typescript\n// vitest.config.ts\nimport { defineConfig } from 'vitest/config';\nimport { emailTesting } from '@bernierllc/vitest-email-testing';\n\nexport default defineConfig({\n  plugins: [\n    emailTesting({\n      smtp: {\n        port: 2525,\n        host: 'localhost'\n      }\n    })\n  ],\n  test: {\n    globals: true\n  }\n});\n```\n\n### Write Tests\n\n```typescript\nimport { describe, test, expect } from 'vitest';\n\ndescribe('Email Tests', () => {\n  test('welcome email', async () => {\n    const email = emailTesting.createTestData({\n      subject: 'Welcome!',\n      html: '<p>Welcome to our service</p>'\n    });\n\n    expect(email).toHaveEmailSubject(/Welcome/);\n    expect(email).toHaveHtmlContent('our service');\n  });\n});\n```\n\n## Custom Matchers\n\n### Basic Email Assertions\n\n```typescript\nexpect(email).toHaveEmailRecipient('user@example.com');\nexpect(email).toHaveEmailSender('noreply@example.com');\nexpect(email).toHaveEmailSubject('Welcome');\nexpect(email).toHaveEmailSubject(/Welcome/); // Regex support\n```\n\n### Content Assertions\n\n```typescript\nexpect(email).toHaveEmailContent('Hello World');\nexpect(email).toHaveHtmlContent('<p>Hello</p>');\nexpect(email).toHaveTextContent('Plain text');\n```\n\n### Template Assertions\n\n```typescript\nexpect(email).toHaveCompletedTemplate();\nexpect(email).toHaveTemplateVariable('userName', 'John Doe');\nexpect(email).toNotHaveUnreplacedVariables();\n```\n\n### Compliance Assertions\n\n```typescript\nexpect(email).toBeCompliantEmail('US');\nexpect(email).toHaveUnsubscribeLink();\nexpect(email).toHavePhysicalAddress();\n```\n\n### Async Assertions\n\n```typescript\nawait expect(email).toHaveBeenDelivered();\nawait expect(email).toHaveBeenDeliveredWithin(5000);\n```\n\n### Schema Validation\n\n```typescript\nconst schema = {\n  type: 'object',\n  properties: {},\n  required: ['from', 'to', 'subject']\n};\n\nexpect(email).toSatisfyEmailSchema(schema);\n```\n\n## Test Utilities\n\n### Generate Test Emails\n\n```typescript\nimport { generateTestEmail, generateCompliantEmail } from '@bernierllc/vitest-email-testing';\n\n// Basic test email\nconst email = generateTestEmail({\n  from: 'sender@example.com',\n  subject: 'Custom Subject'\n});\n\n// Compliant email\nconst compliantEmail = generateCompliantEmail('US');\n```\n\n### Email Sender Mocking\n\n```typescript\nimport { createEmailSenderMock } from '@bernierllc/vitest-email-testing';\n\nconst mock = createEmailSenderMock();\nmock.mockSendSuccess({ delay: 100 });\n\n// Test your code\nawait sendEmail('user@example.com');\n\n// Verify\nexpect(mock.send.calls).toHaveLength(1);\n```\n\n### Batch Testing\n\n```typescript\nimport { batchSendEmails } from '@bernierllc/vitest-email-testing';\n\nconst emails = await batchSendEmails(100, (index) =>\n  generateTestEmail({ to: `user${index}@example.com` })\n);\n```\n\n## Concurrent Testing\n\n```typescript\ndescribe.concurrent('Email Performance', () => {\n  test('send 100 emails', async () => {\n    const emails = await batchSendEmails(100, (i) =>\n      generateTestEmail({ to: `user${i}@example.com` })\n    );\n\n    expect(emails).toHaveLength(100);\n  });\n});\n```\n\n## Configuration Options\n\n```typescript\nemailTesting({\n  smtp: {\n    port: 2525,\n    host: 'localhost'\n  },\n  environment: {\n    isolation: 'per-test',\n    cleanup: 'auto',\n    timeout: 30000\n  },\n  vitest: {\n    concurrent: true,\n    globalSetup: true,\n    snapshotFormat: 'email-optimized'\n  },\n  watchTemplates: {\n    enabled: true,\n    patterns: ['templates/**/*.html'],\n    rerunTests: true\n  }\n})\n```\n\n## API Reference\n\n### Types\n\n- `EmailData` - Email data structure\n- `EmailMatcher` - Email matching criteria\n- `EmailSchema` - Email validation schema\n- `ComplianceRegion` - Compliance region type\n- `EmailTestingConfig` - Plugin configuration\n\n### Functions\n\n- `emailTesting(config?)` - Vitest plugin\n- `installEmailMatchers()` - Install custom matchers\n- `createEmailSenderMock(sender?)` - Create email sender mock\n- `generateTestEmail(overrides?)` - Generate test email\n- `generateCompliantEmail(region?)` - Generate compliant email\n- `waitForCondition(condition, options?)` - Wait for condition\n\n## Integration Documentation\n\n### Integration Status\n\n**Logger:** Not applicable (testing utility)\n**NeverHub:** Not applicable (testing utility)\n\nThis package is a testing utility and does not require runtime integrations with @bernierllc/logger or @bernierllc/neverhub-adapter. It is designed to be a standalone testing tool that works independently of application infrastructure.\n\n### Usage with Other @bernierllc Packages\n\nThis package can be used to test email functionality in any @bernierllc service package:\n\n```typescript\n// Testing @bernierllc/email-service\nimport { describe, test, expect } from 'vitest';\nimport { EmailService } from '@bernierllc/email-service';\nimport { createEmailSenderMock } from '@bernierllc/vitest-email-testing';\n\ndescribe('EmailService', () => {\n  test('sends welcome email', async () => {\n    const mock = createEmailSenderMock();\n    const service = new EmailService({ sender: mock });\n\n    await service.sendWelcome('user@example.com');\n\n    expect(mock.send.calls[0]).toHaveEmailSubject('Welcome');\n  });\n});\n```\n\n### Graceful Degradation\n\nAs a testing utility, this package operates independently and does not depend on external services. All functionality is self-contained within the test environment.\n\n## License\n\nCopyright (c) 2025 Bernier LLC. See LICENSE.md for details.\n","readmeFilename":"README.md"}