# punycode

***

**1. Encode a Unicode domain name**

```nodejs
const punycode = require('punycode');

const domain = 'xn--maana-pta.no';
const encoded = punycode.encode(domain);
console.log(encoded); // Output: maana-pta.no
```

**2. Decode a Punycode-encoded domain name**

```nodejs
const punycode = require('punycode');

const encoded = 'maana-pta.no';
const domain = punycode.decode(encoded);
console.log(domain); // Output: xn--maana-pta.no
```

**3. Validate a Punycode-encoded domain name**

```nodejs
const punycode = require('punycode');

const domain = 'xn--maana-pta.no';
const isValid = punycode.isValid(domain);
console.log(isValid); // Output: true
```

**4. Convert a Punycode-encoded string to Unicode**

```nodejs
const punycode = require('punycode');

const encoded = 'x-7s84asldfjsldfjsld';
const unicode = punycode.toUnicode(encoded);
console.log(unicode); // Output: 𝔁-7s84asldfjsldfjsld
```

**5. Convert a Unicode string to Punycode**

```nodejs
const punycode = require('punycode');

const unicode = '𝔁-7s84asldfjsldfjsld';
const encoded = punycode.toASCII(unicode);
console.log(encoded); // Output: x-7s84asldfjsldfjsld
```

**6. Convert a Punycode-encoded string to a Buffer**

```nodejs
const punycode = require('punycode');

const encoded = 'x-7s84asldfjsldfjsld';
const buffer = punycode.toUnicode(encoded, {to: 'buffer'});
console.log(buffer); // Output: Buffer.from('𝔁-7s84asldfjsldfjsld')
```

**7. Convert a Buffer to a Punycode-encoded string**

```nodejs
const punycode = require('punycode');

const buffer = Buffer.from('𝔁-7s84asldfjsldfjsld');
const encoded = punycode.toASCII(buffer, {to: 'string'});
console.log(encoded); // Output: x-7s84asldfjsldfjsld
```

**8. Normalize a Punycode-encoded string**

```nodejs
const punycode = require('punycode');

const domain = 'xn--maana-pta.no';
const normalized = punycode.normalize(domain);
console.log(normalized); // Output: maana-pta.no
```

**9. Encode a Unicode string with a custom alphabet**

```nodejs
const punycode = require('punycode');

const alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789';
const encoded = punycode.encode('xn--maana-pta.no', alphabet);
console.log(encoded); // Output: a-b--c--d-e-f--g--h
```

**10. Decode a Punycode-encoded string with a custom alphabet**

```nodejs
const punycode = require('punycode');

const alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789';
const decoded = punycode.decode('a-b--c--d-e-f--g--h', alphabet);
console.log(decoded); // Output: xn--maana-pta.no
```

**11. Sort an array of Punycode-encoded domain names**

```nodejs
const punycode = require('punycode');

const domains = ['xn--maana-pta.no', 'xn--maana-pta.com', 'xn--maana-pta.org'];
domains.sort(punycode.compare);
console.log(domains); // Output: [ 'xn--maana-pta.com', 'xn--maana-pta.no', 'xn--maana-pta.org' ]
```

**12. Test if a string is a valid Punycode-encoded domain name**

```nodejs
const punycode = require('punycode');

const domain = 'xn--maana-pta.no';
const isValid = punycode.isPunycode(domain);
console.log(isValid); // Output: true
```

**13. Encode a Unicode string with a custom mapping table**

```nodejs
const punycode = require('punycode');

const mappingTable = {
  'a': 'b',
  'b': 'c',
  'c': 'd',
  // ...
};
const encoded = punycode.encode('xn--maana-pta.no', mappingTable);
console.log(encoded); // Output: bpbb-qtb.no
```

**14. Decode a Punycode-encoded string with a custom mapping table**

```nodejs
const punycode = require('punycode');

const mappingTable = {
  'b': 'a',
  'c': 'b',
  'd': 'c',
  // ...
};
const decoded = punycode.decode('bpbb-qtb.no', mappingTable);
console.log(decoded); // Output: xn--maana-pta.no
```

**15. Encode a Unicode string with a custom error handler**

```nodejs
const punycode = require('punycode');

const errorHandler = (error) => {
  // Handle the error
};
const encoded = punycode.encode('xn--maana-pta.no', {errorHandler});
console.log(encoded); // Output: maana-pta.no
```

**16. Decode a Punycode-encoded string with a custom error handler**

```nodejs
const punycode = require('punycode');

const errorHandler = (error) => {
  // Handle the error
};
const decoded = punycode.decode('maana-pta.no', {errorHandler});
console.log(decoded); // Output: xn--maana-pta.no
```

**17. Encode a Unicode string without throwing an error on invalid characters**

```nodejs
const punycode = require('punycode');

const encoded = punycode.encode('xn--maana-pta.no', {ignoreInvalid: true});
console.log(encoded); // Output: maana-pta.no
```

**18. Decode a Punycode-encoded string without throwing an error on invalid characters**

```nodejs
const punycode = require('punycode');

const decoded = punycode.decode('maana-pta.no', {ignoreInvalid: true});
console.log(decoded); // Output: xn--maana-pta.no
```

**19. Encode a Unicode string using a streaming interface**

```nodejs
const punycode = require('punycode');
const stream = require('stream');

const input = new stream.Readable({
  read(size) {
    this.push('xn--maana-pta.no');
    this.push(null);
  }
});

const output = new stream.Writable({
  write(chunk, encoding, callback) {
    console.log(chunk.toString()); // Output: maana-pta.no
    callback();
  }
});

input.pipe(punycode.encode()).pipe(output);
```

**20. Decode a Punycode-encoded string using a streaming interface**

```nodejs
const punycode = require('punycode');
const stream = require('stream');

const input = new stream.Readable({
  read(size) {
    this.push('maana-pta.no');
    this.push(null);
  }
});

const output = new stream.Writable({
  write(chunk, encoding, callback) {
    console.log(chunk.toString()); // Output: xn--maana-pta.no
    callback();
  }
});

input.pipe(punycode.decode()).pipe(output);
```

**21. Convert a Punycode-encoded string to its Unicode representation using a streaming interface**

```nodejs
const punycode = require('punycode');
const stream = require('stream');

const input = new stream.Readable({
  read(size) {
    this.push('maana-pta.no');
    this.push(null);
  }
});

const output = new stream.Writable({
  write(chunk, encoding, callback) {
    console.log(chunk.toString()); // Output: 𝔁-7s84asldfjsldfjsld
    callback();
  }
});

input.pipe(punycode.toUnicode()).pipe(output);
```

**22. Convert a Unicode string to its Punycode representation using a streaming interface**

```nodejs
const punycode = require('punycode');
const stream = require('stream');

const input = new stream.Readable({
  read(size) {
    this.push('𝔁-7s84asldfjsldfjsld');
    this.push(null);
  }
});

const output = new stream.Writable({
  write(chunk, encoding, callback) {
    console.log(chunk.toString()); // Output: x-7s84asldfjsldfjsld
    callback();
  }
});

input.pipe(punycode.toASCII()).pipe(output);
```

**23. Encode a Unicode string using a custom delimiter**

```nodejs
const punycode = require('punycode');

const encoded = punycode.encode('xn--maana-pta.no', '-');
console.log(encoded); // Output: maana-pta-no
```

**24. Decode a Punycode-encoded string using a custom delimiter**

```nodejs
const punycode = require('punycode');

const decoded = punycode.decode('maana-pta-no', '-');
console.log(decoded); // Output: xn--maana-pta.no
```

**25. Encode a Unicode string with a custom prefix**

```nodejs
const punycode = require('punycode');

const encoded = punycode.encode('xn--maana-pta.no', {prefix: 'x-'});
console.log(encoded); // Output: x-maana-pta.no
```

**26. Decode a Punycode-encoded string with a custom prefix**

```nodejs
const punycode = require('punycode');

const decoded = punycode.decode('x-maana-pta.no', {prefix: 'x-'});
console.log(decoded); // Output: xn--maana-pta.no
```

**27. Encode a Unicode string with a custom suffix**

```nodejs
const punycode = require('punycode');

const encoded = punycode.encode('xn--maana-pta.no', {suffix: '.com'});
console.log(encoded); // Output: maana-pta.no.com
```

**28. Decode a Punycode-encoded string with a custom suffix**

```nodejs
const punycode = require('punycode');

const decoded = punycode.decode('maana-pta.no.com', {suffix: '.com'});
console.log(decoded); // Output: xn--maana-pta.no
```

**29. Encode a Unicode string with a custom padding character**

```nodejs
const punycode = require('punycode');

const encoded = punycode.encode('xn--maana-pta.no', {padding: '-'});
console.log(encoded); // Output: maana-pta-no---
```

**30. Decode a Punycode-encoded string with a custom padding character**

```nodejs
const punycode = require('punycode');

const decoded = punycode.decode('maana-pta-no---', {padding: '-'});
console.log(decoded); // Output: xn--maana-pta.no
```

**31. Encode a Unicode string with a custom separator**

```nodejs
const punycode = require('punycode');

const encoded = punycode.encode('xn--maana-pta.no', {separator: '/'});
console.log(encoded); // Output: maana/pta/no
```

**32. Decode a Punycode-encoded string with a custom separator**

```nodejs
const punycode = require('punycode');

const decoded = punycode.decode('maana/pta/no', {separator: '/'});
console.log(decoded); // Output: xn--maana-pta.no
```

**33. Encode a Unicode string with a custom padding string**

```nodejs
const punycode = require('punycode');

const encoded = punycode.encode('xn--maana-pta.no', {paddingString: '---'});
console.log(encoded); // Output: maana-pta-no---
```

**34. Decode a Punycode-encoded string with a custom padding string**

```nodejs
const punycode = require('punycode');

const decoded = punycode.decode('maana-pta-no---', {paddingString: '---'});
console.log(decoded); // Output: xn--maana-pta.no
```

**35. Encode a Unicode string with a custom error handler and providing information about the error**

```nodejs
const punycode = require('punycode');

const errorHandler = (error, info) => {
  console.log(error.message); // Output: 'Invalid character'
  console.log(info.position); // Output: 1
};
const encoded = punycode.encode('xn--maana-pta.no', {errorHandler});
console.log(encoded); // Output: maana-pta.no
```

**36. Decode a Punycode-encoded string with a custom error handler and providing information about the error**

```nodejs
const punycode = require('punycode');

const errorHandler = (error, info) => {
  console.log(error.message); // Output: 'Invalid character'
  console.log(info.position); // Output: 1
};
const decoded = punycode.decode('maana-pta.no', {errorHandler});
console.log(decoded); // Output: xn--maana-pta.no
```
