File: README.markdown

package info (click to toggle)
node-stringprep 0.8.0-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 156 kB
  • ctags: 33
  • sloc: cpp: 271; makefile: 42
file content (122 lines) | stat: -rw-r--r-- 3,478 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# node-stringprep

[![Build Status](https://travis-ci.org/astro/node-stringprep.png)](https://travis-ci.org/astro/node-stringprep)

[Flattr this!](https://flattr.com/thing/44598/node-stringprep)


Exposes predefined Unicode normalization functions that are required by many protocols. This is just a binding to [ICU](http://icu-project.org/), which is [said to be fast.](http://ayena.de/node/74).

If ICU is not available then we make use of JavaScript fallbacks.

## Usage

```javascript
    var StringPrep = require('node-stringprep').StringPrep;
    var prep = new StringPrep('nameprep');
    prep.prepare('Äffchen')  // => 'äffchen'
```

For a list of supported profiles, see [node-stringprep.cc](http://github.com/astro/node-stringprep/blob/master/node-stringprep.cc#L160)

Javascript fallbacks can be disabled/enabled using the following methods on the `StringPrep` object:

```javascript
var prep = new StringPrep('resourceprep')
prep.disableJsFallbacks()
prep.enableJsFallbacks()
```

Javascript fallbacks are enabled by default. You can also check to see if native `icu` bindings can/will be used by calling the `isNative()` method:

```javascript
var prep = new StringPrep('resourceprep')
prep.isNative()  // true or false
```

We also implement the ToASCII and ToUnicode operations as defined in the [IDNA RFC 3490](http://www.ietf.org/rfc/rfc3490.txt). These routines convert Unicode to ASCII with [NamePrep](http://www.ietf.org/rfc/rfc3491.txt) and then with [Punycode](http://www.ietf.org/rfc/rfc3492.txt), and vice versa.

```javascript
    var nodeStringPrep = require('node-stringprep');
    nodeStringPrep.toASCII('i♥u') // 'xn--iu-t0x'
    nodeStringPrep.toUnicode('xn--iu-t0x') // 'i♥u'
```

The operations can be finessed with an optional second argument, a set of boolean flags:

```javascript
    nodeStringPrep.toASCII('i♥u', {
        allowUnassigned: true, // allow unassigned code points to be converted
        throwIfError: true, // throw exception if error, don't return string unchanged
        useSTD3Rules: true // use the STD3 ASCII rules for host names
    })
    nodeStringPrep.toUnicode('xn--iu-t0x', {
        allowUnassigned: true // allow unassigned code points to be converted
    })
```



## Installation

```
    npm i node-stringprep
```

If `libicu` isn't available installation will gracefully fail and javascript fallbacks will be used.

If experiencing issues with __node-gyp__ please see https://github.com/TooTallNate/node-gyp/issues/363 which may be able to help.

### Debian

```
    apt-get install libicu-dev
```

### RedHat & Centos

```
    yum install libicu-devel
```

### Gentoo ###

```
    emerge icu
```

### OSX
#### MacPorts

```
    port install icu +devel
```

#### Boxen

```
    sudo ln -s /opt/boxen/homebrew/Cellar/icu4c/52.1/bin/icu-config /usr/local/bin/icu-config
    sudo ln -s /opt/boxen/homebrew/Cellar/icu4c/52.1/include/* /usr/local/include
```

#### Homebrew
    brew install icu4c
    ln -s /usr/local/Cellar/icu4c/<VERSION>/bin/icu-config /usr/local/bin/icu-config
    ln -s /usr/local/Cellar/icu4c/<VERSION>/include/* /usr/local/include

If experiencing issues with 'homebrew' installing version 50.1 of icu4c, try the following:

```
    brew search icu4c
    brew tap homebrew/versions
    brew versions icu4c
    cd $(brew --prefix) && git pull --rebase
    git checkout c25fd2f $(brew --prefix)/Library/Formula/icu4c.rb
    brew install icu4c
```

## Running Tests

```
npm test
```