ESM/Typescript native version of punycode.js.
ESM native users / Typescript nodenext
users may have some issues with the existing punycode library, so this hopefully serves as a viable alternative.
Logically this package should be the same as punycode.js. The only advantage of this library is ease-of-use for modern typescript/ESM.
Credit goes to Mathias Bynens for original implementation of this logic.
npm i punycode-esm
import { toASCII, toUnicode } from 'punycode-esm';
// encode domain names
toASCII('mañana.com'); // 'xn--maana-pta.com'
toASCII('☃-⌘.com'); // 'xn----dqo34k.com'
// decode domain names
toUnicode('xn--maana-pta.com'); // 'mañana.com'
toUnicode('xn----dqo34k.com'); // '☃-⌘.com'
punycode-esm
is an ESM module. That means it must be import
ed. To load from a CJS module, use dynamic import const { encode } = await import('punycode-esm');
.
Converts a Punycode string of ASCII symbols to a string of Unicode symbols.
// decode domain name parts
Punycode.decode('maana-pta'); // 'mañana'
Punycode.decode('--dqo34k'); // '☃-⌘'
Converts a string of Unicode symbols to a Punycode string of ASCII symbols.
// encode domain name parts
Punycode.encode('mañana'); // 'maana-pta'
Punycode.encode('☃-⌘'); // '--dqo34k'
Converts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode.
// decode domain names
Punycode.toUnicode('xn--maana-pta.com'); // 'mañana.com'
Punycode.toUnicode('xn----dqo34k.com'); // '☃-⌘.com'
// decode email addresses
Punycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'); // 'джумла@джpумлатест.bрфa'
Converts a lowercased Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that’s already in ASCII.
Punycode.toASCII('mañana.com'); // 'xn--maana-pta.com'
Punycode.toASCII('☃-⌘.com'); // 'xn----dqo34k.com'
// encode email addresses
Punycode.toASCII('джумла@джpумлатест.bрфa'); // 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'
Creates an array containing the numeric code point values of each Unicode symbol in the string. While JavaScript uses UCS-2 internally, this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16.
ucs2Decode('abc'); // [0x61, 0x62, 0x63]
// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE:
punycode.ucs2.decode('\uD834\uDF06'); // [0x1D306]
Creates a string based on an array of numeric code point values.
punycode.ucs2.encode([0x61, 0x62, 0x63]); // 'abc'
punycode.ucs2.encode([0x1D306]); // '\uD834\uDF06'