{"_id":"@haraka/email-address","_rev":"8-80157b0af9b3988801a23916775e5311","name":"@haraka/email-address","dist-tags":{"latest":"3.1.6"},"versions":{"3.0.0":{"name":"@haraka/email-address","version":"3.0.0","keywords":["email","envelope","address","rfc821","rfc2821","rfc5321","RFC-5321","mail","from"],"author":{"url":"http://haraka.github.io","name":"The Haraka Team"},"license":"MIT","_id":"@haraka/email-address@3.0.0","maintainers":[{"name":"msimerson","email":"haraka.mail@gmail.com"},{"name":"tnpi","email":"matt@tnpi.net"},{"name":"msergeant","email":"helpme@gmail.com"},{"name":"baudehlo","email":"helpme@gmail.com"},{"name":"smfreegard","email":"steve@freegard.name"}],"homepage":"https://github.com/haraka/email-address","bugs":{"url":"https://github.com/haraka/email-address/issues"},"dist":{"shasum":"8e9503c2580869cff9fddf64a69efa0a628f0324","tarball":"https://registry.npmjs.org/@haraka/email-address/-/email-address-3.0.0.tgz","fileCount":8,"integrity":"sha512-jjVgu6XGwPu3d+jgVXVfpWsWiBfeFHSkCzuVeA32wkA17JEhLA9O2f/kEJxsiF2dINI2+OK3+xQAVqBWOO5iYg==","signatures":[{"sig":"MEQCIF7doEwEvxtRZlrckp0lUzNGsicBhVR/tYGmoW5YytHwAiBfrWqHYD2IS2imb62M1nUQxRQMbsZ/VU9+NDbB0E0XQg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47253},"main":"./index.cjs","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=22"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.cjs","require":"./index.cjs"},"./package.json":"./package.json"},"gitHead":"86fa6818dddaede0e5f530122df6d858b083615b","scripts":{"lint":"npx eslint index.js index.cjs scripts/*.js test/*.js test/*.cjs","test":"node --test 'test/*.js' 'test/*.cjs'","format":"npm run prettier:fix && npm run lint:fix","prepack":"node scripts/build-cjs.js","prepare":"git rev-parse --git-dir >/dev/null 2>&1 && git config core.hooksPath .githooks || true","lint:fix":"npx eslint --fix index.js index.cjs scripts/*.js test/*.js test/*.cjs","prettier":"npx prettier . --check","versions":"npx npm-dep-mgr check","build:cjs":"node scripts/build-cjs.js","check:cjs":"node scripts/build-cjs.js --check","prettier:fix":"npx prettier . --write --log-level=warn","versions:fix":"npx npm-dep-mgr update","test:coverage":"node --test --experimental-test-coverage 'test/*.js' 'test/*.cjs'","test:coverage:lcov":"mkdir -p coverage && node --test --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=coverage/lcov.info 'test/*.js' 'test/*.cjs'"},"_npmUser":{"name":"tnpi","email":"matt@tnpi.net"},"prettier":{"semi":false,"printWidth":100,"singleQuote":true},"repository":{"url":"git+https://github.com/haraka/email-address.git","type":"git"},"_npmVersion":"11.13.0","description":"Email address parser","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"devDependencies":{"@haraka/eslint-config":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/email-address_3.0.0_1778786897630_0.2607402724385339","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@haraka/email-address","version":"3.1.0","keywords":["email","envelope","address","rfc821","rfc2821","rfc5321","RFC-5321","mail","from"],"author":{"url":"http://haraka.github.io","name":"The Haraka Team"},"license":"MIT","_id":"@haraka/email-address@3.1.0","maintainers":[{"name":"msimerson","email":"haraka.mail@gmail.com"},{"name":"tnpi","email":"matt@tnpi.net"},{"name":"msergeant","email":"helpme@gmail.com"},{"name":"baudehlo","email":"helpme@gmail.com"},{"name":"smfreegard","email":"steve@freegard.name"}],"homepage":"https://github.com/haraka/email-address","bugs":{"url":"https://github.com/haraka/email-address/issues"},"dist":{"shasum":"034aec8f0be095ed8b31a7158bc3a1658184e35e","tarball":"https://registry.npmjs.org/@haraka/email-address/-/email-address-3.1.0.tgz","fileCount":22,"integrity":"sha512-i8Z8AOKmrZdy2o3lxKAoEv/fVLN3fpBKti8NxI48FxPpc0HFLR4D6gIprcPADYkR4BQ6feyG+AceyA9D5dMJ3w==","signatures":[{"sig":"MEUCIQCPmOhp26GvuvgdRzXlY0DqGTHSs2U2GL86A6TwkQ+MfAIgZ7Ldau7nL0fh1KLvluHjHLE5FkABlHhFXfqyqlU+rkQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125342},"main":"./dist/cjs/index.cjs","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=22"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./dist/cjs/index.cjs","require":"./dist/cjs/index.cjs"},"./package.json":"./package.json"},"gitHead":"34aa843f99d15082e2406150fb319e81832f189d","scripts":{"lint":"npx eslint index.js 'lib/*.js' 'dist/cjs/index.cjs' 'dist/cjs/lib/*.cjs' scripts/*.js test/*.js test/*.cjs","test":"node --test 'test/*.js' 'test/*.cjs'","bench":"node scripts/bench.cjs","format":"npm run prettier:fix && npm run lint:fix","prepack":"node scripts/build-cjs.js","prepare":"git rev-parse --git-dir >/dev/null 2>&1 && git config core.hooksPath .githooks || true","lint:fix":"npx eslint --fix index.js 'lib/*.js' 'dist/cjs/index.cjs' 'dist/cjs/lib/*.cjs' scripts/*.js test/*.js test/*.cjs","prettier":"npx prettier . --check","versions":"npx npm-dep-mgr check","build:cjs":"node scripts/build-cjs.js","check:cjs":"node scripts/build-cjs.js --check","prettier:fix":"npx prettier . --write --log-level=warn","versions:fix":"npx npm-dep-mgr update","test:coverage":"node --test --experimental-test-coverage 'test/*.js'","test:coverage:lcov":"mkdir -p coverage && node --test --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=coverage/lcov.info 'test/*.js'"},"_npmUser":{"name":"tnpi","email":"matt@tnpi.net"},"prettier":{"semi":false,"printWidth":100,"singleQuote":true},"repository":{"url":"git+https://github.com/haraka/email-address.git","type":"git"},"_npmVersion":"11.13.0","description":"RFC-5321 envelope and RFC-5322 header email-address parser","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"devDependencies":{"@haraka/eslint-config":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/email-address_3.1.0_1778792484592_0.8159519046199908","host":"s3://npm-registry-packages-npm-production"}},"3.1.1":{"name":"@haraka/email-address","version":"3.1.1","keywords":["email","envelope","address","rfc821","rfc2821","rfc5321","RFC-5321","mail","from"],"author":{"url":"http://haraka.github.io","name":"The Haraka Team"},"license":"MIT","_id":"@haraka/email-address@3.1.1","maintainers":[{"name":"msimerson","email":"haraka.mail@gmail.com"},{"name":"tnpi","email":"matt@tnpi.net"},{"name":"msergeant","email":"helpme@gmail.com"},{"name":"baudehlo","email":"helpme@gmail.com"},{"name":"smfreegard","email":"steve@freegard.name"}],"homepage":"https://github.com/haraka/email-address","bugs":{"url":"https://github.com/haraka/email-address/issues"},"dist":{"shasum":"047250107929effe370ef5383b2fddf190137f62","tarball":"https://registry.npmjs.org/@haraka/email-address/-/email-address-3.1.1.tgz","fileCount":23,"integrity":"sha512-QWVhnmxXZ9n0LiU772N5CGXeNIk0KlbZdCth77EMYCjRPb/tmyJWVImWyCt7ZI19gB30f5AfsAuTzHlLbYSebw==","signatures":[{"sig":"MEUCIFPwIuwX2iC1IwfRBl+6QBlDE3zapZ817Me16netPyFXAiEAq1LqO++a7EbYK2MoBbCiL4ql1uebZkikkfzluuLeDKQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@haraka%2femail-address@3.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":131020},"main":"./dist/cjs/index.cjs","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=22"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./dist/cjs/index.cjs","require":"./dist/cjs/index.cjs"},"./package.json":"./package.json"},"gitHead":"15137882aea19057c04db3732261f32bb88f2078","scripts":{"lint":"npx eslint index.js 'lib/*.js' 'dist/cjs/index.cjs' 'dist/cjs/lib/*.cjs' scripts/*.js test/*.js test/*.cjs","test":"node --test 'test/*.js' 'test/*.cjs'","bench":"node scripts/bench.cjs","format":"npm run prettier:fix && npm run lint:fix","prepack":"node scripts/build-cjs.js","prepare":"git rev-parse --git-dir >/dev/null 2>&1 && git config core.hooksPath .githooks || true","lint:fix":"npx eslint --fix index.js 'lib/*.js' 'dist/cjs/index.cjs' 'dist/cjs/lib/*.cjs' scripts/*.js test/*.js test/*.cjs","prettier":"npx prettier . --check","versions":"npx npm-dep-mgr check","build:cjs":"node scripts/build-cjs.js","check:cjs":"node scripts/build-cjs.js --check","prettier:fix":"npx prettier . --write --log-level=warn","versions:fix":"npx npm-dep-mgr update","test:coverage":"node --test --experimental-test-coverage 'test/*.js'","test:coverage:lcov":"mkdir -p coverage && node --test --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=coverage/lcov.info 'test/*.js'"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:801f77d2-b8d5-4a2e-89ba-7a5188614661"}},"prettier":{"semi":false,"printWidth":100,"singleQuote":true},"repository":{"url":"git+https://github.com/haraka/email-address.git","type":"git"},"_npmVersion":"11.12.1","description":"RFC-5321 envelope and RFC-5322 header email-address parser","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"devDependencies":{"@haraka/eslint-config":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/email-address_3.1.1_1778802000059_0.000031625633658549646","host":"s3://npm-registry-packages-npm-production"}},"3.1.2":{"name":"@haraka/email-address","version":"3.1.2","keywords":["email","envelope","address","rfc821","rfc2821","rfc5321","RFC-5321","mail","from"],"author":{"url":"http://haraka.github.io","name":"The Haraka Team"},"license":"MIT","_id":"@haraka/email-address@3.1.2","maintainers":[{"name":"msimerson","email":"haraka.mail@gmail.com"},{"name":"tnpi","email":"matt@tnpi.net"},{"name":"msergeant","email":"helpme@gmail.com"},{"name":"baudehlo","email":"helpme@gmail.com"},{"name":"smfreegard","email":"steve@freegard.name"}],"homepage":"https://github.com/haraka/email-address","bugs":{"url":"https://github.com/haraka/email-address/issues"},"dist":{"shasum":"2152aa3d9edad9eb525a855ce0deacad1e7d5a58","tarball":"https://registry.npmjs.org/@haraka/email-address/-/email-address-3.1.2.tgz","fileCount":23,"integrity":"sha512-EiZst06g3aBFFZrATTSGDgyS/Yz9/+IuARKL3zl7R/RA+wAM4/za6xtIOlA3u5vXoY4Zt4n5C8XJSguDmMysQg==","signatures":[{"sig":"MEUCIEj/IaH3hbjar04jNOAppOPkhC9+yWPdOC+sZxFIvXyIAiEAiQunibfr6kk+z2tTJRaRcrKXtkUDc3FpMcLV5Wg14U8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@haraka%2femail-address@3.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":131029},"main":"./dist/cjs/index.cjs","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=22"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./dist/cjs/index.cjs","require":"./dist/cjs/index.cjs"},"./package.json":"./package.json"},"gitHead":"12e24b60115ba0d399ec1c4ab214c833fcea5490","scripts":{"lint":"npx eslint index.js 'lib/*.js' 'dist/cjs/index.cjs' 'dist/cjs/lib/*.cjs' scripts/*.js test/*.js test/*.cjs","test":"node --test 'test/*.js' 'test/*.cjs'","bench":"node scripts/bench.cjs","format":"npm run prettier:fix && npm run lint:fix","prepack":"node scripts/build-cjs.js","prepare":"git rev-parse --git-dir >/dev/null 2>&1 && git config core.hooksPath .githooks || true","lint:fix":"npx eslint --fix index.js 'lib/*.js' 'dist/cjs/index.cjs' 'dist/cjs/lib/*.cjs' scripts/*.js test/*.js test/*.cjs","prettier":"npx prettier . --check","versions":"npx npm-dep-mgr check","build:cjs":"node scripts/build-cjs.js","check:cjs":"node scripts/build-cjs.js --check","prettier:fix":"npx prettier . --write --log-level=warn","versions:fix":"npx npm-dep-mgr update","test:coverage":"node --test --experimental-test-coverage 'test/*.js'","test:coverage:lcov":"mkdir -p coverage && node --test --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=coverage/lcov.info 'test/*.js'"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:801f77d2-b8d5-4a2e-89ba-7a5188614661"}},"prettier":{"semi":false,"printWidth":100,"singleQuote":true},"repository":{"url":"git+https://github.com/haraka/email-address.git","type":"git"},"_npmVersion":"11.11.0","description":"RFC-5321 envelope and RFC-5322 header email-address parser","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"@haraka/eslint-config":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/email-address_3.1.2_1778812662736_0.39657274749179283","host":"s3://npm-registry-packages-npm-production"}},"3.1.3":{"name":"@haraka/email-address","version":"3.1.3","keywords":["email","envelope","address","rfc821","rfc2821","rfc5321","RFC-5321","mail","from"],"author":{"url":"http://haraka.github.io","name":"The Haraka Team"},"license":"MIT","_id":"@haraka/email-address@3.1.3","maintainers":[{"name":"msimerson","email":"haraka.mail@gmail.com"},{"name":"tnpi","email":"matt@tnpi.net"},{"name":"msergeant","email":"helpme@gmail.com"},{"name":"baudehlo","email":"helpme@gmail.com"},{"name":"smfreegard","email":"steve@freegard.name"}],"homepage":"https://github.com/haraka/email-address","bugs":{"url":"https://github.com/haraka/email-address/issues"},"dist":{"shasum":"700412f4af2823b4a1caf5885b822aa78d35ebc6","tarball":"https://registry.npmjs.org/@haraka/email-address/-/email-address-3.1.3.tgz","fileCount":25,"integrity":"sha512-ECFwc48l/YL5rhGwtsI2L1DMenjKHx35O8qjx+ttaLA46I4M5Uisa7SFFKz/K/x7qKtB+saE5bLyJrPDKjm+QA==","signatures":[{"sig":"MEQCICpkQykmc1odxdm4KsZ3m/wC4dlvtP9ZCcQIBzaT/LvtAiB7yleF9Q/5DGmUvhd80cWJDnOPxvbc2eRRJnW6/uhGlg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@haraka%2femail-address@3.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":138493},"main":"./dist/cjs/index.cjs","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=22"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./dist/cjs/index.cjs","require":"./dist/cjs/index.cjs"},"./package.json":"./package.json"},"gitHead":"fc7c7dce6f3e12317bf6d10946e853fd0754ea39","scripts":{"lint":"npx eslint index.js 'lib/*.js' 'dist/cjs/index.cjs' 'dist/cjs/lib/*.cjs' scripts/*.js test/*.js test/*.cjs","test":"node --test 'test/*.js' 'test/*.cjs'","bench":"node scripts/bench.cjs","format":"npm run prettier:fix && npm run lint:fix","prepack":"node scripts/build-cjs.js","prepare":"git rev-parse --git-dir >/dev/null 2>&1 && git config core.hooksPath .githooks || true","lint:fix":"npx eslint --fix index.js 'lib/*.js' 'dist/cjs/index.cjs' 'dist/cjs/lib/*.cjs' scripts/*.js test/*.js test/*.cjs","prettier":"npx prettier . --check","versions":"npx npm-dep-mgr check","build:cjs":"node scripts/build-cjs.js","check:cjs":"node scripts/build-cjs.js --check","prettier:fix":"npx prettier . --write --log-level=warn","versions:fix":"npx npm-dep-mgr update","test:coverage":"node --test --experimental-test-coverage 'test/*.js'","test:coverage:lcov":"mkdir -p coverage && node --test --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=coverage/lcov.info 'test/*.js'"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:801f77d2-b8d5-4a2e-89ba-7a5188614661"}},"prettier":{"semi":false,"printWidth":100,"singleQuote":true},"repository":{"url":"git+https://github.com/haraka/email-address.git","type":"git"},"_npmVersion":"11.11.0","description":"RFC-5321 envelope and RFC-5322 header email-address parser","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"@haraka/eslint-config":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/email-address_3.1.3_1778829252163_0.5241126833904728","host":"s3://npm-registry-packages-npm-production"}},"3.1.4":{"name":"@haraka/email-address","version":"3.1.4","keywords":["email","envelope","address","rfc821","rfc2821","rfc5321","RFC-5321","mail","from"],"author":{"url":"http://haraka.github.io","name":"The Haraka Team"},"license":"MIT","_id":"@haraka/email-address@3.1.4","maintainers":[{"name":"msimerson","email":"haraka.mail@gmail.com"},{"name":"tnpi","email":"matt@tnpi.net"},{"name":"msergeant","email":"helpme@gmail.com"},{"name":"baudehlo","email":"helpme@gmail.com"},{"name":"smfreegard","email":"steve@freegard.name"}],"homepage":"https://github.com/haraka/email-address","bugs":{"url":"https://github.com/haraka/email-address/issues"},"dist":{"shasum":"4272d82c1dd571a3fe52f09b2f032928cb9e8bab","tarball":"https://registry.npmjs.org/@haraka/email-address/-/email-address-3.1.4.tgz","fileCount":25,"integrity":"sha512-6dBFcdl3qxAuICrQghnuqFZ0AhatxRrESZROqZm6lLxJz7vMg8WS9VtS9M3B+yuDNA3aWwGeJBEMN0kuBIQelA==","signatures":[{"sig":"MEYCIQDnZ3BujrIrgmgTO/NA4ATcsNR5p4cLOSqMLz1TeqkMHwIhAMrtNqkuq74ai2SOs/TSDEvP83plrx/4PgUOBUY5HS1O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@haraka%2femail-address@3.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":139176},"main":"./dist/cjs/index.cjs","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=22"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./dist/cjs/index.cjs","require":"./dist/cjs/index.cjs"},"./package.json":"./package.json"},"gitHead":"93fbdf1e293e3620b48c34eb532e2a5bcd0f5699","scripts":{"lint":"npx eslint index.js 'lib/*.js' 'dist/cjs/index.cjs' 'dist/cjs/lib/*.cjs' scripts/*.js test/*.js test/*.cjs","test":"node --test 'test/*.js' 'test/*.cjs'","bench":"node scripts/bench.cjs","format":"npm run prettier:fix && npm run lint:fix","prepack":"node scripts/build-cjs.js","prepare":"git rev-parse --git-dir >/dev/null 2>&1 && git config core.hooksPath .githooks || true","lint:fix":"npx eslint --fix index.js 'lib/*.js' 'dist/cjs/index.cjs' 'dist/cjs/lib/*.cjs' scripts/*.js test/*.js test/*.cjs","prettier":"npx prettier . --check","versions":"npx npm-dep-mgr check","build:cjs":"node scripts/build-cjs.js","check:cjs":"node scripts/build-cjs.js --check","prettier:fix":"npx prettier . --write --log-level=warn","versions:fix":"npx npm-dep-mgr update","test:coverage":"node --test --experimental-test-coverage 'test/*.js'","test:coverage:lcov":"mkdir -p coverage && node --test --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=coverage/lcov.info 'test/*.js'"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:801f77d2-b8d5-4a2e-89ba-7a5188614661"}},"prettier":{"semi":false,"printWidth":100,"singleQuote":true},"repository":{"url":"git+https://github.com/haraka/email-address.git","type":"git"},"_npmVersion":"11.12.1","description":"RFC-5321 envelope and RFC-5322 header email-address parser","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"devDependencies":{"@haraka/eslint-config":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/email-address_3.1.4_1778865268102_0.3003693061637951","host":"s3://npm-registry-packages-npm-production"}},"3.1.5":{"name":"@haraka/email-address","version":"3.1.5","keywords":["email","envelope","address","rfc821","rfc2821","rfc5321","RFC-5321","mail","from"],"author":{"url":"http://haraka.github.io","name":"The Haraka Team"},"license":"MIT","_id":"@haraka/email-address@3.1.5","maintainers":[{"name":"msimerson","email":"haraka.mail@gmail.com"},{"name":"tnpi","email":"matt@tnpi.net"},{"name":"msergeant","email":"helpme@gmail.com"},{"name":"baudehlo","email":"helpme@gmail.com"},{"name":"smfreegard","email":"steve@freegard.name"}],"homepage":"https://github.com/haraka/email-address","bugs":{"url":"https://github.com/haraka/email-address/issues"},"dist":{"shasum":"923aa6069c455f4034b05a484f5d8c1558c259b8","tarball":"https://registry.npmjs.org/@haraka/email-address/-/email-address-3.1.5.tgz","fileCount":25,"integrity":"sha512-W1/rUKDrV9KZJiVd4JlmTmvsUtu/C1EfIheMdc3BQF0BWO2yiTk4zsLoiUObsHr+GzVSrA9DVkRYTOJsbgu70Q==","signatures":[{"sig":"MEUCIHaQy0tfNvd3iT+fzencaqVau0LmZFxAKQDRxf6YynX3AiEA64Sdn3N+/cx9SrQt7P9aht7r5/xS07l4o9EtGMv6Bd8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@haraka%2femail-address@3.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":141035},"main":"./dist/cjs/index.cjs","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=22"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./dist/cjs/index.cjs","require":"./dist/cjs/index.cjs"},"./package.json":"./package.json"},"gitHead":"fe91235259e6ccb539a19262594fef061b8315f5","scripts":{"lint":"npx eslint index.js 'lib/*.js' 'dist/cjs/index.cjs' 'dist/cjs/lib/*.cjs' scripts/*.js test/*.js test/*.cjs","test":"node --test 'test/*.js' 'test/*.cjs'","bench":"node scripts/bench.cjs","format":"npm run prettier:fix && npm run lint:fix","prepack":"node scripts/build-cjs.js","prepare":"git rev-parse --git-dir >/dev/null 2>&1 && git config core.hooksPath .githooks || true","lint:fix":"npx eslint --fix index.js 'lib/*.js' 'dist/cjs/index.cjs' 'dist/cjs/lib/*.cjs' scripts/*.js test/*.js test/*.cjs","prettier":"npx prettier . --check","versions":"npx npm-dep-mgr check","build:cjs":"node scripts/build-cjs.js","check:cjs":"node scripts/build-cjs.js --check","prettier:fix":"npx prettier . --write --log-level=warn","versions:fix":"npx npm-dep-mgr update","test:coverage":"node --test --experimental-test-coverage 'test/*.js'","test:coverage:lcov":"mkdir -p coverage && node --test --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=coverage/lcov.info 'test/*.js'"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:801f77d2-b8d5-4a2e-89ba-7a5188614661"}},"prettier":{"semi":false,"printWidth":100,"singleQuote":true},"repository":{"url":"git+https://github.com/haraka/email-address.git","type":"git"},"_npmVersion":"11.12.1","description":"RFC-5321 envelope and RFC-5322 header email-address parser","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"devDependencies":{"@haraka/eslint-config":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/email-address_3.1.5_1779856708715_0.2742359158381431","host":"s3://npm-registry-packages-npm-production"}},"3.1.6":{"name":"@haraka/email-address","version":"3.1.6","description":"RFC-5321 envelope and RFC-5322 header email-address parser","author":{"name":"The Haraka Team","url":"http://haraka.github.io"},"type":"module","main":"./dist/cjs/index.cjs","module":"./index.js","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js","require":"./dist/cjs/index.cjs","default":"./dist/cjs/index.cjs"},"./package.json":"./package.json"},"homepage":"https://github.com/haraka/email-address","keywords":["email","envelope","address","rfc821","rfc2821","rfc5321","RFC-5321","mail","from"],"bugs":{"url":"https://github.com/haraka/email-address/issues"},"engines":{"node":">=22"},"scripts":{"build:cjs":"node scripts/build-cjs.js","check:cjs":"node scripts/build-cjs.js --check","bench":"node scripts/bench.cjs","prepare":"git rev-parse --git-dir >/dev/null 2>&1 && git config core.hooksPath .githooks || true","prepack":"node scripts/build-cjs.js","lint":"npx eslint index.js 'lib/*.js' 'dist/cjs/index.cjs' 'dist/cjs/lib/*.cjs' scripts/*.js test/*.js test/*.cjs","lint:fix":"npx eslint --fix index.js 'lib/*.js' 'dist/cjs/index.cjs' 'dist/cjs/lib/*.cjs' scripts/*.js test/*.js test/*.cjs","test":"node --test 'test/*.js' 'test/*.cjs'","test:coverage":"node --test --experimental-test-coverage 'test/*.js'","test:coverage:lcov":"mkdir -p coverage && node --test --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=coverage/lcov.info 'test/*.js'","versions":"npx npm-dep-mgr check","format":"npm run prettier:fix && npm run lint:fix","prettier":"npx prettier . --check","prettier:fix":"npx prettier . --write --log-level=warn","versions:fix":"npx npm-dep-mgr update"},"repository":{"type":"git","url":"git+https://github.com/haraka/email-address.git"},"devDependencies":{"@haraka/eslint-config":"^3.0.0"},"license":"MIT","prettier":{"printWidth":100,"singleQuote":true,"semi":false},"gitHead":"4bea96181e4db2718cc523876856e2c0f32ea7fc","_id":"@haraka/email-address@3.1.6","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-albuxbQSCI8x/67zgo0kUUUyxsrTV6irss2f21Kfjgb+T8RJXU5SzScJYwhR86zYpQFfrSF3bkzKV/dc8pOAPw==","shasum":"19e889784304dff63195ec6583bcd9917f38438a","tarball":"https://registry.npmjs.org/@haraka/email-address/-/email-address-3.1.6.tgz","fileCount":25,"unpackedSize":143792,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@haraka%2femail-address@3.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCOZgjT5dtDkbhQUNgwnDpnFUNHAMdtBA+BQ9FUS9/ZJwIgJBLEIVuq+/7NYRc9s3DyrVJ8RKEhZ/SnJ10XN6Od9tE="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:801f77d2-b8d5-4a2e-89ba-7a5188614661"}},"directories":{},"maintainers":[{"name":"msimerson","email":"haraka.mail@gmail.com"},{"name":"tnpi","email":"matt@tnpi.net"},{"name":"msergeant","email":"helpme@gmail.com"},{"name":"baudehlo","email":"helpme@gmail.com"},{"name":"smfreegard","email":"steve@freegard.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/email-address_3.1.6_1780683714011_0.9069876402327492"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-14T19:28:17.573Z","modified":"2026-06-05T18:21:54.540Z","3.0.0":"2026-05-14T19:28:17.775Z","3.1.0":"2026-05-14T21:01:24.789Z","3.1.1":"2026-05-14T23:40:00.239Z","3.1.2":"2026-05-15T02:37:42.922Z","3.1.3":"2026-05-15T07:14:12.318Z","3.1.4":"2026-05-15T17:14:28.245Z","3.1.5":"2026-05-27T04:38:28.852Z","3.1.6":"2026-06-05T18:21:54.157Z"},"bugs":{"url":"https://github.com/haraka/email-address/issues"},"author":{"name":"The Haraka Team","url":"http://haraka.github.io"},"license":"MIT","homepage":"https://github.com/haraka/email-address","keywords":["email","envelope","address","rfc821","rfc2821","rfc5321","RFC-5321","mail","from"],"repository":{"type":"git","url":"git+https://github.com/haraka/email-address.git"},"description":"RFC-5321 envelope and RFC-5322 header email-address parser","maintainers":[{"name":"msimerson","email":"haraka.mail@gmail.com"},{"name":"tnpi","email":"matt@tnpi.net"},{"name":"msergeant","email":"helpme@gmail.com"},{"name":"baudehlo","email":"helpme@gmail.com"},{"name":"smfreegard","email":"steve@freegard.name"}],"readme":"[![Build Status][ci-img]][ci-url]\n[![Coverage Status][cov-img]][cov-url]\n\n# @haraka/email-address\n\nA high-performance zero-dependency email address parser and validator for email addresses in **plain**, SMTP **Envelope** (RFC 5321) and Email **Header** (RFC 5322/6532) formats. Dual-published as ESM and CJS – use it with `import` or `require`.\n\nDefaults to strict RFC adherence but includes a lenient [postel](https://en.wikipedia.org/wiki/Robustness_principle) option for real-world inputs. Best-in-class [O(n)](https://stackoverflow.com/questions/487258/what-is-a-plain-english-explanation-of-big-o-notation) performance ([benchmarks](PERFORMANCE.md)).\n\n```js\nparseEnvelope('<from@example.com>') // → Address\nparseHeader('\"Alice\" <a@x>, \"Bob\" <b@x>') // → Address[]\nparseHeader('Friends: a@x, b@x;') // → [Group]\n```\n\nThe envelope side handles `<>`, `<Postmaster>`, dot-atom and quoted local-parts,\nIPv4/IPv6 address literals, and IDN (U-labels → punycode). The header side adds display names, comments (including nested), folding whitespace, group syntax, and the obsolete\nproductions real-world mail still emits.\n\n## Installation\n\n```sh\nnpm install @haraka/email-address\n```\n\n## Usage\n\nThe ESM and CJS entry points both expose an identical `Address` class.\n\n### Envelope\n\n```js\nimport { Address, parseEnvelope } from '@haraka/email-address'\n\nconst addr = parseEnvelope('<user@example.com>')\naddr.user // 'user'\naddr.host // 'example.com'\naddr.address // 'user@example.com'\naddr.format() // '<user@example.com>'\naddr.isNull() // false\n\n// The class form is preserved for back-compat with v3:\nnew Address('<user@example.com>').format() // '<user@example.com>'\n```\n\n### Header\n\n`parseHeader` accepts the full set of header productions — name-addr,\naddr-spec, address-list, and groups. The return is always an array,\nmixing `Address` and `Group` instances in document order.\n\n```js\nimport { parseHeader, parseFrom, Group } from '@haraka/email-address'\n\nconst list = parseHeader(\n  '\"Alice Smith\" <alice@example.com>, bob@example.com (Bob), ' +\n    'Friends: c@example.com, d@example.com;',\n)\n\nfor (const entry of list) {\n  if (entry instanceof Group) {\n    console.log('group:', entry.phrase, entry.addresses.length, 'members')\n  } else {\n    console.log(entry.phrase, entry.address, entry.name())\n  }\n}\n\n// Header-shaped shortcuts:\nparseFrom('Travis CI <builds@travis-ci.org>') // → Address[]\nparseSender('\"Anne, PMPM\" <info@x.example>') // → Address\nparseReplyTo('=?utf-8?Q?Anne?= <info@x.example>') // → Address[]\n```\n\n### Plain-address validation (web forms, general-purpose)\n\nWhen you just need \"is this a valid email address\" — sign-up forms, contact pages, CSV imports — use `parseAddress` (throws on bad input) or `isValid` (returns a boolean). These reject anything that isn't a bare `local@domain`: angle brackets, comments, display names, address lists, and groups all fail.\n\n```js\nimport { parseAddress, isValid } from '@haraka/email-address'\n\nisValid('user@example.com') // true\nisValid('<user@example.com>') // false  (angle brackets are envelope-only)\nisValid('Alice <a@example.com>') // false  (display names are header-only)\nisValid('not-an-email') // false\n\n// Strict, RFC-conformant — \"user@example\" (no TLD) is valid by default:\nisValid('user@localhost') // true\n\n// Web-form preset: require a TLD:\nisValid('user@localhost', { requireTLD: true }) // false\nisValid('user@example.com', { requireTLD: true }) // true\n\n// Throwing variant — returns an Address when valid:\nconst a = parseAddress('first.last@example.com')\na.user // 'first.last'\na.host // 'example.com'\n```\n\n### CJS\n\n```js\nconst { Address, parseEnvelope, parseHeader, Group } = require('@haraka/email-address')\n\nparseEnvelope('<u@example.com>').format()\nparseHeader('\"Alice\" <a@x>')[0].phrase // 'Alice'\n```\n\nBoth styles run end-to-end in [`examples/esm.mjs`](examples/esm.mjs) and [`examples/cjs.cjs`](examples/cjs.cjs); each prints parsed fields for the same set of inputs.\n\nFor internationalized addresses, the parser preserves the original U-label form and lazily exposes the A-label (punycode) form:\n\n```js\nconst addr = new Address('<δοκιμή@παράδειγμα.gr>')\naddr.user // 'δοκιμή'\naddr.original_host // 'παράδειγμα.gr'\naddr.host // 'xn--hxajbheg2az3al.gr'\naddr.is_utf8 // true\naddr.format(true) // '<δοκιμή@xn--hxajbheg2az3al.gr>'\n```\n\n### Module layout\n\nThe package's `exports` map resolves to the right file automatically:\n\n| Consumer style                                    | Resolves to          | Notes                                 |\n| ------------------------------------------------- | -------------------- | ------------------------------------- |\n| `import { Address } from '@haraka/email-address'` | `index.js`           | Native ESM; the canonical source.     |\n| `require('@haraka/email-address')`                | `dist/cjs/index.cjs` | Auto-generated CJS mirror tree.       |\n| TypeScript                                        | `index.d.ts`         | Same types regardless of entry point. |\n\n## API\n\n### Parsers\n\n| Function                         | Returns                | Description                                                                              |\n| -------------------------------- | ---------------------- | ---------------------------------------------------------------------------------------- |\n| `parseEnvelope(input, opts?)`    | `Address`              | RFC-5321 single envelope address (`MAIL FROM:` / `RCPT TO:`).                            |\n| `parseHeader(input, opts?)`      | `(Address \\| Group)[]` | RFC-5322 header value. Default `startAt = 'address-list'`.                               |\n| `parseFrom(input)`               | `(Address \\| Group)[]` | `parseHeader(input, { startAt: 'from' })`.                                               |\n| `parseSender(input)`             | `Address`              | `parseHeader(input, { startAt: 'sender' })[0]` — `Sender:` is single-address by grammar. |\n| `parseReplyTo(input)`            | `(Address \\| Group)[]` | `parseHeader(input, { startAt: 'reply-to' })`.                                           |\n| `new Address(envelope, opts?)`   | `Address`              | Back-compat constructor — equivalent to `parseEnvelope`.                                 |\n| `new Address(user, host, opts?)` | `Address`              | Build an address from its parts without parsing.                                         |\n\n### Envelope options\n\n| Option   | Type      | Default | Effect                                                                                                                                                                                                                                                                                                                                               |\n| -------- | --------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `postel` | `boolean` | `false` | Be liberal in what you accept. When `true`: (1) malformed `[IPv6:…]` bodies that fail the strict §4.1.3 grammar fall back to the General-address-literal path and are accepted as-is; (2) the 256-octet RFC 5321 §4.5.3.1.3 path limit and the 64-octet §4.5.3.1.1 local-part limits are raised to the 998-octet SMTP text-line maximum (§4.5.3.1.6) |\n\n### Header options\n\n| Option                    | Type                                                                                                                        | Default          | Effect                                                                                                                                                                                                                                            |\n| ------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `startAt`                 | `'address-list' \\| 'from' \\| 'sender' \\| 'reply-to' \\| 'mailbox' \\| 'mailbox-list' \\| 'group' \\| 'angle-addr' \\| 'address'` | `'address-list'` | Which RFC-5322 production to start at. Mainly used by the `parseFrom` / `parseSender` / `parseReplyTo` wrappers.                                                                                                                                  |\n| `allowAtInDisplayName`    | `boolean`                                                                                                                   | `true`           | Accept `@` inside display names — common in real-world `From:` values like `foo@example <foo@example.com>`.                                                                                                                                       |\n| `allowCommaInDisplayName` | `boolean`                                                                                                                   | `false`          | Accept `,` inside display names. Off by default because it breaks the `,`-separated address-list grammar.                                                                                                                                         |\n| `postel`                  | `boolean`                                                                                                                   | `false`          | Be liberal in what you accept. Enables two RFC-5322 §4.4 obs-\\* productions: **obs-local-part** (multi-word local-parts such as `\"foo\".\"bar\"@x.com`) and **obs-mbox-list** null entries (`a@x, , b@y`, leading or interstitial commas in groups). |\n\n### `Address` properties\n\n| Property        | Description                                                                                         |\n| --------------- | --------------------------------------------------------------------------------------------------- |\n| `user`          | Local-part as written (case preserved, quotes preserved).                                           |\n| `host`          | Domain in canonical form: lowercased, U-labels converted to A-labels (punycode).                    |\n| `original_host` | Domain as written: case preserved, U-labels preserved.                                              |\n| `original`      | The full input string.                                                                              |\n| `is_utf8`       | `true` when **either** the local-part or the domain contains non-ASCII (RFC 6531). Unset otherwise. |\n| `address`       | `user@host` using `original_host` so case is preserved. Read-only getter.                           |\n| `phrase`        | Display name from a header parse. Empty string for envelope-parsed addresses.                       |\n| `comment`       | Trailing `(…)` comment from a header parse. Empty string for envelope-parsed addresses.             |\n| `group`         | Enclosing `Group` when parsed inside one, else `null`.                                              |\n\n### `Address` methods\n\n| Method                         | Returns                                                                                                                                   |\n| ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |\n| `isNull()`                     | `true` for the null reverse-path (`<>` / empty input).                                                                                    |\n| `format(use_punycode = false)` | Canonical form. Envelope: `<user@host>`. Header: `Phrase <user@host> (Comment)`. With `use_punycode = true`, the punycode `host` is used. |\n| `name()`                       | Heuristic personal-name extraction from `phrase` / `comment` / `address`. Returns `''` when nothing usable is found.                      |\n| `toString()`                   | Same as `format()`.                                                                                                                       |\n\n### `Group`\n\n`Group` instances appear in `parseHeader` results when the input\ncontains a group like `Friends: a@x, b@x;`. Each member `Address` has\nits `.group` field pointing back at the enclosing `Group`.\n\n| Field / Method | Description                                          |\n| -------------- | ---------------------------------------------------- |\n| `phrase`       | Group display name.                                  |\n| `addresses`    | `Address[]` — group members in document order.       |\n| `format()`     | `phrase:addr1,addr2,…;` rendering per RFC 5322 §3.4. |\n| `name()`       | Heuristic personal-name extraction from `phrase`.    |\n\n### Name-handling utilities\n\nPorted from `address-rfc2822` for source compatibility:\n\n| Function                          | Description                                                                                      |\n| --------------------------------- | ------------------------------------------------------------------------------------------------ |\n| `nameCase(s)`                     | Title-case with Mc/O' and Roman-numeral special cases (`level iii support → Level III Support`). |\n| `isAllLower(s)` / `isAllUpper(s)` | Case-detection helpers used by `nameCase`.                                                       |\n| `extractName(phrase, address?)`   | The heuristic behind `Address.prototype.name()` — exposed for direct use.                        |\n\n## Standards conformance\n\nThis parser targets strict conformance to the SMTP envelope grammar by default. The table below tracks each relevant RFC and what the module does about it.\n\n| RFC                                                                       | Subject                                | Status                                                                                                                                                                                                                                                                                                                          |\n| ------------------------------------------------------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [RFC 821][rfc821] / [2821][rfc2821] / [5321][rfc5321]                     | SMTP envelope addresses                | **Conformant.** Recursive-descent parser implementing §4.1.2 (Mailbox, Path, source-route, ADL), §4.1.3 (address literals), and §4.5.3.1 length limits.                                                                                                                                                                         |\n| [RFC 5321 §4.1.2][rfc5321]                                                | Local-part (dot-string, quoted)        | **Conformant.** Both forms parsed; case preserved; quoted-pair (`\\x`) accepted.                                                                                                                                                                                                                                                 |\n| [RFC 5321 §4.1.3][rfc5321]                                                | IPv4 address literal                   | **Conformant.** Strict octet validation (0-255, no leading zeros).                                                                                                                                                                                                                                                              |\n| [RFC 5321 §4.1.3][rfc5321]                                                | IPv6 address literal                   | **Conformant (strict).** The `IPv6:` tag is validated against the IPv6-full / IPv6-comp / IPv6v4-full / IPv6v4-comp productions. The `postel: true` option opts back into the lax fallback.                                                                                                                                     |\n| [RFC 5321 §4.1.2][rfc5321]                                                | Source routes / ADL                    | **Variance (discarded).** Source routes parse correctly but are silently dropped; only the final mailbox is retained. RFC 5321 deprecates source routes; preserve externally if you need them.                                                                                                                                  |\n| [RFC 5321 §4.5.3.1.1][rfc5321]                                            | 64-octet local-part                    | **Conformant.** Bytes counted as UTF-8 octets. `postel: true` raises the cap to 998 octets (the §4.5.3.1.6 SMTP text-line maximum).                                                                                                                                                                                             |\n| [RFC 5321 §4.5.3.1.2][rfc5321]                                            | 255-octet domain                       | **Conformant.** Checked before any IDN encoding.                                                                                                                                                                                                                                                                                |\n| [RFC 5321 §4.5.3.1.3][rfc5321]                                            | 256-octet Path                         | **Conformant.** Enforced on the input string. `postel: true` raises the cap to 998 octets (the §4.5.3.1.6 SMTP text-line maximum).                                                                                                                                                                                              |\n| [RFC 1035 §2.3.4][rfc1035] / [RFC 5321 §4.5.3.1.1][rfc5321]               | 63-octet label                         | **Conformant.** Each sub-domain label is rejected if its UTF-8 length exceeds 63 octets.                                                                                                                                                                                                                                        |\n| [RFC 1123 §2.1][rfc1123]                                                  | Labels may start with a digit          | **Conformant.**                                                                                                                                                                                                                                                                                                                 |\n| [RFC 3629][rfc3629]                                                       | UTF-8 octet counting                   | **Conformant.** Uses `Buffer.byteLength(..., 'utf8')` everywhere a length is checked.                                                                                                                                                                                                                                           |\n| [RFC 5322][rfc5322]                                                       | Message-header address syntax          | **Conformant via `parseHeader`.** Recursive-descent parser for §3.4 (name-addr, addr-spec, group, address-list) with the §4.4 obsolete productions enabled by default (FWS around `@`, dotted display names, `_` in legacy labels, nested comments). Envelope parsing still rejects these — they only apply to the header path. |\n| [RFC 6531][rfc6531]                                                       | SMTPUTF8 — internationalized addresses | **Conformant (basic).** Non-ASCII codepoints accepted in both local-part and domain. `is_utf8` is set when **either** side contains non-ASCII. Unicode normalization (NFC) is **not** performed.                                                                                                                                |\n| [RFC 5890][rfc5890] / [5891][rfc5891] / [5892][rfc5892] / [UTS-46][uts46] | IDNA2008 / UTS-46                      | **Conformant (via platform).** IDN conversion uses Node's built-in `url.domainToASCII`, which implements UTS-46 (IDNA2008 with transitional rules). Invalid IDN labels throw.                                                                                                                                                   |\n| [RFC 5893][rfc5893]                                                       | Bidi (right-to-left) rules             | **Inherited from `domainToASCII`.** Not separately enforced by this module.                                                                                                                                                                                                                                                     |\n| [RFC 5198][rfc5198]                                                       | Net-Unicode (NFC)                      | **Variance (not normalized).** The parser preserves the caller-supplied form. Normalize externally if you need bit-identical comparison across encodings.                                                                                                                                                                       |\n\n## License\n\nMIT.\n\n[rfc821]: https://www.rfc-editor.org/rfc/rfc821\n[rfc1035]: https://www.rfc-editor.org/rfc/rfc1035\n[rfc1123]: https://www.rfc-editor.org/rfc/rfc1123\n[rfc2821]: https://www.rfc-editor.org/rfc/rfc2821\n[rfc3629]: https://www.rfc-editor.org/rfc/rfc3629\n[rfc5198]: https://www.rfc-editor.org/rfc/rfc5198\n[rfc5321]: https://www.rfc-editor.org/rfc/rfc5321\n[rfc5322]: https://www.rfc-editor.org/rfc/rfc5322\n[rfc5890]: https://www.rfc-editor.org/rfc/rfc5890\n[rfc5891]: https://www.rfc-editor.org/rfc/rfc5891\n[rfc5892]: https://www.rfc-editor.org/rfc/rfc5892\n[rfc5893]: https://www.rfc-editor.org/rfc/rfc5893\n[rfc6531]: https://www.rfc-editor.org/rfc/rfc6531\n[uts46]: https://www.unicode.org/reports/tr46/\n[ci-img]: https://github.com/haraka/email-address/actions/workflows/ci.yml/badge.svg\n[ci-url]: https://github.com/haraka/email-address/actions/workflows/ci.yml\n[cov-img]: https://codecov.io/github/haraka/email-address/branch/main/graph/badge.svg?token=fbar73t4OV\n[cov-url]: https://codecov.io/github/haraka/email-address\n","readmeFilename":"README.md"}