Skip to content

stacksjs/ts-punycode

Repository files navigation

Social Card of this repo

npm version GitHub Actions Commitizen friendly

ts-punycode

A modern TypeScript implementation of Punycode (RFC 3492) with full RFC 5891 support. This library helps you convert Unicode domain names to ASCII (Punycode) and back.

Features

  • 🔄 Bidirectional Conversion - Convert between Unicode and Punycode seamlessly
  • 📧 Email Support - Handles email addresses with Unicode domains
  • 💪 Type-Safe - Full TypeScript support with comprehensive type definitions
  • 🌐 RFC Compliant - Implements RFC 3492 and RFC 5891 specifications
  • 🧪 Well-Tested - Comprehensive test suite ensuring reliability
  • 📦 Zero Dependencies - Lightweight and self-contained
  • 🔍 Unicode 15.1 - Support for the latest Unicode standard

Installation

# Using npm
npm install ts-punycode

# Using yarn
yarn add ts-punycode

# Using pnpm
pnpm add ts-punycode

# Using bun
bun add ts-punycode

Usage

Basic Usage

import punycode from 'ts-punycode'

// Convert Unicode to Punycode
punycode.encode('münchen') // Returns 'mnchen-3ya'

// Convert Punycode to Unicode
punycode.decode('mnchen-3ya') // Returns 'münchen'

// Convert Domain Names
punycode.toASCII('münchen.de') // Returns 'xn--mnchen-3ya.de'
punycode.toUnicode('xn--mnchen-3ya.de') // Returns 'münchen.de'

// Handle Email Addresses
punycode.toASCII('user@münchen.de') // Returns 'user@xn--mnchen-3ya.de'
punycode.toUnicode('user@xn--mnchen-3ya.de') // Returns 'user@münchen.de'

Advanced Usage

import punycode from 'ts-punycode'
// import { punycode } from 'ts-punycode'

// Working with Unicode Code Points
const codePoints = punycode.ucs2.decode('☃') // Returns [9731]
const string = punycode.ucs2.encode([9731]) // Returns '☃'

// Version Information
console.log(punycode.version) // Returns current version

API Reference

Main Methods

  • encode(input: string): string Converts a string of Unicode symbols to a Punycode string of ASCII-only symbols.

  • decode(input: string): string Converts a Punycode string of ASCII-only symbols to a string of Unicode symbols.

  • toASCII(input: string): string Converts a Unicode string representing a domain name or email address to Punycode.

  • toUnicode(input: string): string Converts a Punycode string representing a domain name or email address to Unicode.

UCS-2 Utilities

  • ucs2.decode(string: string): number[] Creates an array containing the numeric code points of each Unicode character.

  • ucs2.encode(codePoints: number[]): string Creates a string based on an array of numeric code points.

Error Handling

The library throws RangeError with descriptive messages for various error conditions:

  • Overflow: When input needs wider integers to process
  • Not Basic: When encountering illegal input >= 0x80 (not a basic code point)
  • Invalid Input: For general invalid input conditions

Contributing

Please see CONTRIBUTING for details.

Community

For help, discussion about best practices, or any other conversation that would benefit from being searchable:

Discussions on GitHub

For casual chit-chat with others using this package:

Join the Stacks Discord Server

Postcardware

Stacks OSS will always stay open-sourced, and we will always love to receive postcards from wherever Stacks is used! And we also publish them on our website. Thank you, Spatie.

Our address: Stacks.js, 12665 Village Ln #2306, Playa Vista, CA 90094, United States 🌎

Credits

Sponsors

We would like to extend our thanks to the following sponsors for funding Stacks development. If you are interested in becoming a sponsor, please reach out to us.

License

The MIT License (MIT). Please see LICENSE for more information.

Made with 💙

About

🔃 A TypeScript Punycode converter. RFC 3492 & RFC 5891 supported.

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Sponsor this project

  •  

Contributors 2

  •  
  •  
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy