Package Exports
- @adraffy/ens-normalize
- @adraffy/ens-normalize/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@adraffy/ens-normalize) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
ens-normalize.js
0-dependancy Compact ES6 Ethereum Name Service (ENS) Name Normalizer that works in the browser.
- Passes 100% ENSIP Norm Validation Tests
- Custom
NFC
Implementation (or use native)- Passes 100% Unicode
15.0.0
Normalization Tests
- Passes 100% Unicode
- Minified File Sizes:
- Resolver Demo
import {ens_normalize} from '@adraffy/ens-normalize';
// npm i @adraffy/ens-normalize
// browser: https://unpkg.com/@adraffy/ens-normalize@latest/dist/index.min.js
// string -> string
// throws on invalid names
// output ready for namehash
let normalized = ens_normalize('RaFFY🚴♂️.eTh');
// "raffy🚴♂.eth"
// note: does not enforce .eth TLD 3-character minimum
Format names with fully-qualified emoji:
// works like ens_normalize
// output ready for display
let pretty = ens_beautify('1⃣2⃣.eth');
// "1️⃣2️⃣.eth"
// note: normalization is unchanged:
// ens_normalize(ens_beautify(x)) == ens_normalize(x)
Normalize name fragments:
// these fragments fail ens_normalize() due to ens_normalize_post_check() rules
// but will normalize fine as fragments
let frag1 = ens_normalize_fragment('AB--');
let frag2 = ens_normalize_fragment('\u{303}');
// structural logic is delayed until Post-check:
let norm_gTLD = ens_normalize_post_check('eth');
Instead of exposing an IDNA-like API (is_valid()
, get_mapped()
, etc.), this library exposes a single function which converts names to tokens:
// string -> Token[]
let tokens = ens_tokenize('R💩\u{FE0F}a\u{FE0F}\u{304}\u{AD}./'); // never throws
// [
// {
// type: 'mapped',
// cp: 82, // input
// cps: [ 114 ] // output
// },
// {
// type: 'emoji',
// input: [ 128169, 65039 ], // input
// emoji: [ 128169, 65039 ], // fully-qualified
// cps: [ 128169 ] // output
// },
// {
// type: 'nfc',
// input: [ 97, 772 ], // input (before nfc, only valid or mapped)
// cps: [ 257 ], // output (after nfc)
// tokens: [ // tokens (before nfc)
// { type: 'valid', cps: [ 97 ] },
// { type: 'ignored', cp: 65039 },
// { type: 'valid', cps: [ 772 ] }
// ]
// },
// { type: 'ignored', cp: 173 },
// { type: 'stop' },
// { type: 'disallowed', cp: 47 }
// ]
Generates an array of supported emoji codepoints:
// () -> number[][]
console.log(ens_emoji());
// [
// [ 2764 ],
// [ 128169, 65039 ],
// [ 128105, 127997, 8205, 9877, 65039 ],
// ...
// ]
Build
git clone
this repo thennpm install
- Follow instructions in /derive/ to generate data files from scratch
npm run derive
npm run make
to compress data files from/derive/output/
- Follow instructions in /validate to generate validation tests
npm run validate
npm run test
to perform validation testsnpm run build
create/dist/