Punycode Node.js ponyfill
node:punycode
module as an npm package
πββοΈ Uses the native node:punycode
module when using Node.js
π Uses punycode.js v2.0.1 everywhere else
node:punycode
module is deprecated in Node.js core. Instead, it's
recommended to use a user-land implementation like punycode.js (which this
package is based on). This package is provided solely for parity with node:
APIs.
Installation
Install this package using npm, Yarn, pnpm, or your other favorite npm package manager. Here's a quick copy-paste for npm users:
npm install @nodefill/punycode
This package is also compatible with Deno via their compatibility layer. You can
import the package directly using the new npm:
specifier, or a
Deno-compatible ESM CDN like esm.sh or jsDelivr.
import {} from "npm:@nodefill/punycode";
import {} from "https://esm.sh/@nodefill/punycode";
If you're using not using a build tool and you just want to use the package in your browser, you can use an ESM npm CDN like esm.sh or jsDelivr.
import {} from "https://esm.sh/@nodefill/punycode";
import {} from "https://esm.run/@nodefill/punycode";
Usage
No matter what environment you import this package in, you'll always be greeted
with a warning (unless you pass node --no-warnings
). This package is
deprecated in Node.js core. Instead, it's recommended to use a user-land
implementation like punycode.js. This package is provided solely for parity
with node:
APIs.
Here's a quick overview of the API:
import { toASCII, toUnicode } from "@nodefill/punycode";
console.log(toASCII("π"));
//=> 'xn--e28h'
console.log(toUnicode("xn--wp8h"));
//=> π
node:punycode
docs!
Development
Special thanks to Mathias Bynens for the punycode.js v2.0.1 implementation!
The code for the non-node
targets is ripped straight from there (plus a
warning message and explicit exports). As for types, you can thank TypeStrong
and the DefinitelyTyped community for the @types/node
definitions which,
again, are copy-pasted into the index-types.d.ts
file.
There's no tests and no TypeScript since this package is simple enough to not warrant those extra things.
This package itself should be deprecated on npm if/when the node:punycode
module is removed from Node.js core. Until then, don't deprecate it. Why? So
that it doesn't show a warning when you install it,