{"_id":"@nodable/entities","_rev":"8-d921b335da17cf01d4b1941102e83009","name":"@nodable/entities","dist-tags":{"latest":"3.0.0"},"versions":{"1.0.0":{"name":"@nodable/entities","version":"1.0.0","keywords":["fast","xml","html","entity"],"author":{"url":"https://solothought.com","name":"Amit Gupta"},"license":"MIT","_id":"@nodable/entities@1.0.0","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/nodable/val-parsers#readme","bugs":{"url":"https://github.com/nodable/val-parsers/issues"},"dist":{"shasum":"289270d478e779f8abcfc2d79172d94190a63e83","tarball":"https://registry.npmjs.org/@nodable/entities/-/entities-1.0.0.tgz","fileCount":7,"integrity":"sha512-JoyscCJg4De1NJAZhJHxcYjN8snyl2kHcjYYmeLZ9xfGoPVE6Fiz/q3mMbxLOKRuWgshTYFSH118mQe8AmHmyA==","signatures":[{"sig":"MEUCIA6FTUigYBsTbkqd8pVGUPqE8bHIaBoy8veGUAkGBEYOAiEAiqWEsY2WN6uZCEBd6SmpWX1HhrH0UILGRILRuH8Q0DI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55841},"jest":{"testMatch":["**/?(*.)+(spec|test).[jt]s?(x)","**/*_spec.[jt]s?(x)"]},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","funding":[{"url":"https://github.com/sponsors/nodable","type":"github"}],"gitHead":"c8e2a5d5bdf010e38eb8bee200f81b7a4dc43488","scripts":{"lint":"eslint src/ test/","test":"node --experimental-vm-modules node_modules/.bin/jest","test:watch":"node --experimental-vm-modules node_modules/.bin/jest --watch","test:coverage":"node --experimental-vm-modules node_modules/.bin/jest --coverage"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/nodable/val-parsers.git","type":"git"},"_npmVersion":"11.11.0","description":"Replace XML, HTML, External entites with security controls","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/entities_1.0.0_1776135392824_0.850104485117515","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@nodable/entities","version":"1.0.1","keywords":["fast","xml","html","entity"],"author":{"url":"https://solothought.com","name":"Amit Gupta"},"license":"MIT","_id":"@nodable/entities@1.0.1","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/nodable/val-parsers#readme","bugs":{"url":"https://github.com/nodable/val-parsers/issues"},"dist":{"shasum":"db01c3946d0eeb3ed99e2837e248e22696f87941","tarball":"https://registry.npmjs.org/@nodable/entities/-/entities-1.0.1.tgz","fileCount":7,"integrity":"sha512-P+QVl83POYu47navqBcOSbjJzYlGQNXwzZXDAt3im6Kzs8tn3twmDKHuAEjB9zpQCF45Hc1xY4ND0lQAV12NXA==","signatures":[{"sig":"MEYCIQCCX3frS0p/vzEDo19FBvRFw7lQcECuZaf8o3tZ1YxijQIhANzS+IVWi4IIEKKsEGPZR/ig4Ru8OZjmwpPqjB5lBaWt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56111},"jest":{"testMatch":["**/?(*.)+(spec|test).[jt]s?(x)","**/*_spec.[jt]s?(x)"]},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","funding":[{"url":"https://github.com/sponsors/nodable","type":"github"}],"gitHead":"a57ff9ecc0a21323fb03f19153beb7cc708a4f4e","scripts":{"lint":"eslint src/ test/","test":"node --experimental-vm-modules node_modules/.bin/jest","test:watch":"node --experimental-vm-modules node_modules/.bin/jest --watch","test:coverage":"node --experimental-vm-modules node_modules/.bin/jest --coverage"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/nodable/val-parsers.git","type":"git"},"_npmVersion":"11.11.0","description":"Replace XML, HTML, External entites with security controls","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/entities_1.0.1_1776152008586_0.2869486549149003","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@nodable/entities","version":"1.1.0","keywords":["fast","xml","html","entity"],"author":{"url":"https://solothought.com","name":"Amit Gupta"},"license":"MIT","_id":"@nodable/entities@1.1.0","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/nodable/val-parsers#readme","bugs":{"url":"https://github.com/nodable/val-parsers/issues"},"dist":{"shasum":"f98e5ee5a6e987b4cad56eb97be81043d9b8d31d","tarball":"https://registry.npmjs.org/@nodable/entities/-/entities-1.1.0.tgz","fileCount":6,"integrity":"sha512-bidpxmTBP0pOsxULw6XlxzQpTgrAGLDHGBK/JuWhPDL6ZV0GZ/PmN9CA9do6e+A9lYI6qx6ikJUtJYRxup141g==","signatures":[{"sig":"MEYCIQDAanXCv3W8074DYHhZ72a71v7jss1R0v2Oiow8/ZZSGwIhAJYT50f49vqDJcbGTblOSqMOARtg37+EVz+1Y2z9VpsP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44085},"jest":{"testMatch":["**/?(*.)+(spec|test).[jt]s?(x)","**/*_spec.[jt]s?(x)"]},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","funding":[{"url":"https://github.com/sponsors/nodable","type":"github"}],"gitHead":"b252eb629b01c1a1d17332b9ce30c9b48a916ce5","scripts":{"lint":"eslint src/ test/","test":"node --experimental-vm-modules node_modules/.bin/jest","test:watch":"node --experimental-vm-modules node_modules/.bin/jest --watch","test:coverage":"node --experimental-vm-modules node_modules/.bin/jest --coverage"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/nodable/val-parsers.git","type":"git"},"_npmVersion":"11.11.0","description":"Replace XML, HTML, External entites with security controls","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/entities_1.1.0_1776166487231_0.6679952319322622","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@nodable/entities","version":"2.0.0","keywords":["fast","xml","html","entity"],"author":{"url":"https://solothought.com","name":"Amit Gupta"},"license":"MIT","_id":"@nodable/entities@2.0.0","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/nodable/val-parsers#readme","bugs":{"url":"https://github.com/nodable/val-parsers/issues"},"dist":{"shasum":"87915cb148864eb57d3ab80e491f3f7698e8bab4","tarball":"https://registry.npmjs.org/@nodable/entities/-/entities-2.0.0.tgz","fileCount":8,"integrity":"sha512-uQcOfJ0JEnVmZI5z4WiyflxFqccQu9YHdlQiknIWf4YS2kxvQu/jFPK/VAAZ1WgDMNKCVZg0JCcdEqzAxprMRA==","signatures":[{"sig":"MEUCIQC7vXNGRMveSmoAg8HzxdO98x/4yluo2Vl9gguV9lZuvQIgVOP1W8UKlWIdNcv96W4xogpqxxGGmFmZu91DFD++PQk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52010},"jest":{"testMatch":["**/?(*.)+(spec|test).[jt]s?(x)","**/*_spec.[jt]s?(x)"]},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","funding":[{"url":"https://github.com/sponsors/nodable","type":"github"}],"gitHead":"4cd718fd6d9eb5b38f9c9bd4aea8bb3f4edbd2fb","scripts":{"lint":"eslint src/ test/","test":"node --experimental-vm-modules node_modules/.bin/jest","test:watch":"node --experimental-vm-modules node_modules/.bin/jest --watch","test:coverage":"node --experimental-vm-modules node_modules/.bin/jest --coverage"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/nodable/val-parsers.git","type":"git"},"_npmVersion":"11.11.0","description":"Entity parser for XML, HTML, External entites with security controls","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/entities_2.0.0_1776271185008_0.9660337641498382","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@nodable/entities","version":"2.1.0","keywords":["fast","xml","html","entity","encode","decode","ncr","security","performance"],"author":{"url":"https://solothought.com","name":"Amit Gupta"},"license":"MIT","_id":"@nodable/entities@2.1.0","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/nodable/val-parsers#readme","bugs":{"url":"https://github.com/nodable/val-parsers/issues"},"dist":{"shasum":"f543e5c6446720d4cf9e498a83019dd159973bc2","tarball":"https://registry.npmjs.org/@nodable/entities/-/entities-2.1.0.tgz","fileCount":8,"integrity":"sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==","signatures":[{"sig":"MEQCIC6rIrkk01i3tdusLjbheNVCO/FsJlltIp2atBFBlKV5AiBe99XyvOxJawoSoEJgFTwFW5xPFfY9VRTKRMrjzHDiRw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60255},"jest":{"testMatch":["**/?(*.)+(spec|test).[jt]s?(x)","**/*_spec.[jt]s?(x)"]},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","funding":[{"url":"https://github.com/sponsors/nodable","type":"github"}],"gitHead":"f1c61a65e7b967c17b13822ef71e91bd25f17ce2","scripts":{"lint":"eslint src/ test/","test":"node --experimental-vm-modules node_modules/.bin/jest","test:watch":"node --experimental-vm-modules node_modules/.bin/jest --watch","test:coverage":"node --experimental-vm-modules node_modules/.bin/jest --coverage"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/nodable/val-parsers.git","type":"git"},"_npmVersion":"11.11.0","description":"Entity parser for XML, HTML, External entites with security and NCR control","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/entities_2.1.0_1776322621274_0.16478805551612918","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@nodable/entities","version":"2.1.1","keywords":["fast","xml","html","entity","encode","decode","ncr","security","performance"],"author":{"url":"https://solothought.com","name":"Amit Gupta"},"license":"MIT","_id":"@nodable/entities@2.1.1","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/nodable/val-parsers#readme","bugs":{"url":"https://github.com/nodable/val-parsers/issues"},"dist":{"shasum":"ce41931e9b72606d7f0598d665e46e889285d78a","tarball":"https://registry.npmjs.org/@nodable/entities/-/entities-2.1.1.tgz","fileCount":8,"integrity":"sha512-Pig3HxDIoMgjdEH8OCf/dkcTmLFjJRjWuq8jSnklu284/TKOPibSRERmOykiwmyXTtv61mP+44f3GMx0tLAyjg==","signatures":[{"sig":"MEQCIAeUP/23qSPyevgnggnye4tvjr/I1P0kjrsLczSVxs12AiBX/g8RZRU5UHl47X0TNrsX1cthL6v5ll7mu7aCvmSj4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59957},"jest":{"testMatch":["**/?(*.)+(spec|test).[jt]s?(x)","**/*_spec.[jt]s?(x)"]},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","funding":[{"url":"https://github.com/sponsors/nodable","type":"github"}],"gitHead":"8aa6d25b44b96a547e47c00873baaf5817ae2b9f","scripts":{"lint":"eslint src/ test/","test":"node --experimental-vm-modules node_modules/.bin/jest","test:watch":"node --experimental-vm-modules node_modules/.bin/jest --watch","test:coverage":"node --experimental-vm-modules node_modules/.bin/jest --coverage"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/nodable/val-parsers.git","type":"git"},"_npmVersion":"11.11.0","description":"Entity parser for XML, HTML, External entites with security and NCR control","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/entities_2.1.1_1779955976002_0.15557985757337334","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@nodable/entities","version":"2.2.0","keywords":["fast","xml","html","entity","entities","stringify","encode","decode","ncr","security","safe","performance"],"author":{"url":"https://solothought.com","name":"Amit Gupta"},"license":"MIT","_id":"@nodable/entities@2.2.0","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"homepage":"https://github.com/nodable/val-parsers#readme","bugs":{"url":"https://github.com/nodable/val-parsers/issues"},"dist":{"shasum":"a1d45a992b022591b1c2b03a77935c939375b642","tarball":"https://registry.npmjs.org/@nodable/entities/-/entities-2.2.0.tgz","fileCount":8,"integrity":"sha512-9uGyhaQavEUMC8AIddIjau4NsnsXhou+j5sBAGojCM1oxmQpVKTWR/9JxABD6UAv12vpIms55fPZKFQEhG6uBg==","signatures":[{"sig":"MEQCIGkK1GA50RH9j5bDDmK/aW8xSnVxqXaHmfa1EENYyrrTAiBw7KPvALstN+tKWP9jjyq6DinPQ4U0UF95g7sM7APhMg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67378},"jest":{"testMatch":["**/?(*.)+(spec|test).[jt]s?(x)","**/*_spec.[jt]s?(x)"]},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","funding":[{"url":"https://github.com/sponsors/nodable","type":"github"}],"gitHead":"1a2c08a483b5b6428f1b3d01974875c97f3b3953","scripts":{"lint":"eslint src/ test/","test":"node --experimental-vm-modules node_modules/.bin/jest","test:watch":"node --experimental-vm-modules node_modules/.bin/jest --watch","test:coverage":"node --experimental-vm-modules node_modules/.bin/jest --coverage"},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"repository":{"url":"git+https://github.com/nodable/val-parsers.git","type":"git"},"_npmVersion":"11.11.0","description":"Entity parser for XML, HTML, External entites with security and NCR control","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/entities_2.2.0_1781235165312_0.19343748678109174","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@nodable/entities","version":"3.0.0","description":"Entity parser for XML, HTML, External entites with security and NCR control","main":"./src/index.js","type":"module","sideEffects":false,"types":"./src/index.d.ts","scripts":{"test":"node --experimental-vm-modules node_modules/.bin/jest","test:watch":"node --experimental-vm-modules node_modules/.bin/jest --watch","test:coverage":"node --experimental-vm-modules node_modules/.bin/jest --coverage","lint":"eslint src/ test/"},"repository":{"type":"git","url":"git+https://github.com/nodable/val-parsers.git"},"keywords":["fast","xml","html","entity","entities","stringify","encode","decode","ncr","security","safe","performance"],"author":{"name":"Amit Gupta","url":"https://solothought.com"},"license":"MIT","publishConfig":{"access":"public"},"devDependencies":{"jest":"^29.7.0"},"funding":[{"type":"github","url":"https://github.com/sponsors/nodable"}],"jest":{"testMatch":["**/?(*.)+(spec|test).[jt]s?(x)","**/*_spec.[jt]s?(x)"]},"gitHead":"d2070d76a8ba07e6c7fa142caeb51ffd756e47eb","_id":"@nodable/entities@3.0.0","bugs":{"url":"https://github.com/nodable/val-parsers/issues"},"homepage":"https://github.com/nodable/val-parsers#readme","_nodeVersion":"22.14.0","_npmVersion":"11.18.0","dist":{"integrity":"sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw==","shasum":"694703bc864d30eaed55c2e3def00dbd61493670","tarball":"https://registry.npmjs.org/@nodable/entities/-/entities-3.0.0.tgz","fileCount":9,"unpackedSize":74395,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC//0PLaqJnzHb44FbZe8i7Jf+/p3Ek3rYCRHpFk7t/HwIhANM70mp8rfbgp7ZK90fHGW2fgNHyDY1Bf4+9cdw5GqPy"}]},"_npmUser":{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"},"directories":{},"maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/entities_3.0.0_1783995729462_0.662104866172041"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-14T02:56:32.367Z","modified":"2026-07-14T02:22:09.768Z","1.0.0":"2026-04-14T02:56:32.987Z","1.0.1":"2026-04-14T07:33:28.724Z","1.1.0":"2026-04-14T11:34:47.381Z","2.0.0":"2026-04-15T16:39:45.183Z","2.1.0":"2026-04-16T06:57:01.435Z","2.1.1":"2026-05-28T08:12:56.230Z","2.2.0":"2026-06-12T03:32:45.450Z","3.0.0":"2026-07-14T02:22:09.627Z"},"bugs":{"url":"https://github.com/nodable/val-parsers/issues"},"author":{"name":"Amit Gupta","url":"https://solothought.com"},"license":"MIT","homepage":"https://github.com/nodable/val-parsers#readme","keywords":["fast","xml","html","entity","entities","stringify","encode","decode","ncr","security","safe","performance"],"repository":{"type":"git","url":"git+https://github.com/nodable/val-parsers.git"},"description":"Entity parser for XML, HTML, External entites with security and NCR control","maintainers":[{"name":"amitgupta","email":"amitgupta.gwl@gmail.com"}],"readme":"# @nodable/entities\n\nFast, zero-dependency XML/HTML entity encoder and decoder for Node.js.\n\n## Install\n\n```bash\nnpm install @nodable/entities\n```\n\n## Quick start\n\n```js\nimport { EntityEncoder, EntityDecoder, ALL_ENTITIES } from '@nodable/entities';\n\n// Encode: plain text → entity references\n// v3 requires an explicit entity set when encoding named (non‑ASCII) characters\nconst enc = new EntityEncoder({ namedEntities: ALL_ENTITIES });\nenc.encode('Hello © 2024 & <stuff>');\n// → 'Hello &copy; 2024 &amp; &lt;stuff&gt;'\n\n// Decode: entity references → plain text\nconst dec = new EntityDecoder({ namedEntities: ALL_ENTITIES });\ndec.decode('Hello &copy; 2024 &amp; &lt;stuff&gt;');\n// → 'Hello © 2024 & <stuff>'\n```\n\nIf you only need to encode XML‑unsafe characters (`&`, `<`, `>`, `\"`, `'`), you can disable named‑entity encoding entirely and avoid importing any entity set:\n\n```js\nconst enc = new EntityEncoder({ encodeAllNamed: false });\nenc.encode('© <stuff>'); // → '© &lt;stuff&gt;'  (copyright stays literal)\n```\n\nTo encode only a specific subset of characters (e.g. common HTML entities), pass a custom map:\n\n```js\nimport { EntityEncoder, COMMON_HTML, CURRENCY } from '@nodable/entities';\n\nconst enc = new EntityEncoder({ namedEntities: { ...COMMON_HTML, ...CURRENCY } });\nenc.encode('Price: 10 © 2024'); // only COMMON_HTML/CURRENCY entities are recognized\n```\n\n---\n\n## Migration from v2 to v3\n\n**Breaking change:**  \nIn v2, `new EntityEncoder()` automatically used the full built‑in entity set to encode non‑ASCII characters (like `©` → `&copy;`). This caused poor tree‑shaking: every consumer paid the cost of the entire entity table, even if they never used it.\n\nIn v3, **`EntityEncoder` no longer includes a default entity set**.  \nIf you pass no options and `encodeAllNamed` is `true` (the default), the constructor will **throw an error**:\n\n```js\nconst enc = new EntityEncoder(); // throws: \"encodeAllNamed is true but no `namedEntities` was provided\"\n```\n\n### How to update\n\n| What you need | v2 code | v3 code |\n|---------------|---------|---------|\n| **Full built‑in set** (same as v2) | `new EntityEncoder()` | `import { ALL_ENTITIES } from '@nodable/entities';`<br>`new EntityEncoder({ namedEntities: ALL_ENTITIES })` |\n| **Only XML‑unsafe chars** (no named entities) | `new EntityEncoder({ encodeAllNamed: false })` | **Same** – no change |\n| **Custom subset** | `new EntityEncoder({ namedEntities: myMap })` | **Same** – but now your map is required for named‑entity encoding |\n\nThis change allows bundlers to tree‑shake unused entity categories – you only pay for the characters you actually encode.\n\n### Upgrading step‑by‑step\n\n1. Update to `@nodable/entities@3.0.0`.\n2. Find all `new EntityEncoder()` calls in your project.\n3. Decide:\n   - If you need the full set: import `ALL_ENTITIES` and pass it as `namedEntities`.\n   - If you only need XML‑unsafe escaping: add `{ encodeAllNamed: false }`.\n   - If you used a custom set: keep it as‑is – it already worked.\n4. Run your tests – the encoder should now behave as before, but with better bundle size.\n\n## Performance\n\n|  | encode | decode |\n|---|---|---|\n| `entities` (npm) | 3.65 M req/s | 1.76 M req/s |\n| `@nodable/entities` | 3.33 M req/s | **5.19 M req/s** |\n\n## Documentation\n\n- [EntityEncoder](docs/EntityEncoder.md) — options, API, recipes\n- [EntityDecoder](docs/EntityDecoder.md) — options, API, security limits, entity sets\n\n## License\n\nMIT","readmeFilename":"README.md"}