nanoid 2.1.4 → 2.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +11 -9
- package/async/format.browser.js +17 -0
- package/async/format.js +5 -8
- package/async/index.browser.js +1 -1
- package/format.browser.js +14 -0
- package/format.js +5 -9
- package/index.browser.js +1 -1
- package/non-secure/index.js +1 -1
- package/package.json +5 -3
- package/url.js +1 -1
package/CHANGELOG.md
CHANGED
@@ -1,6 +1,20 @@
|
|
1
1
|
# Change Log
|
2
2
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
3
3
|
|
4
|
+
## 2.1.8
|
5
|
+
* Improve React docs (by Nahum Zsilva).
|
6
|
+
|
7
|
+
## 2.1.7
|
8
|
+
* Reduce `index`, `async` and `non-secure` size (by @polemius).
|
9
|
+
|
10
|
+
## 2.1.6
|
11
|
+
* Reduce size (by Stas Lashmanov).
|
12
|
+
* Return fast mask for Node.js.
|
13
|
+
|
14
|
+
## 2.1.5
|
15
|
+
* Reduce size (by Max Graey).
|
16
|
+
* Fix IE support.
|
17
|
+
|
4
18
|
## 2.1.4
|
5
19
|
* Reduce `generate` size (by Vsevolod Rodionov).
|
6
20
|
* Reduce `format` and `format` size (by Victor).
|
package/README.md
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
A tiny, secure, URL-friendly, unique string ID generator for JavaScript.
|
7
7
|
|
8
|
-
* **Small.**
|
8
|
+
* **Small.** 137 bytes (minified and gzipped). No dependencies.
|
9
9
|
[Size Limit] controls the size.
|
10
10
|
* **Safe.** It uses cryptographically strong random APIs.
|
11
11
|
Can be used in clusters.
|
@@ -14,7 +14,7 @@ A tiny, secure, URL-friendly, unique string ID generator for JavaScript.
|
|
14
14
|
So ID size was reduced from 36 to 21 symbols.
|
15
15
|
|
16
16
|
```js
|
17
|
-
|
17
|
+
const nanoid = require('nanoid')
|
18
18
|
model.id = nanoid() //=> "V1StGXR8_Z5jdHi6B-myT"
|
19
19
|
```
|
20
20
|
|
@@ -63,7 +63,7 @@ There are three main differences between Nano ID and UUID v4:
|
|
63
63
|
1. Nano ID uses a bigger alphabet, so a similar number of random bits
|
64
64
|
are packed in just 21 symbols instead of 36.
|
65
65
|
2. Nano ID code is 3 times less than `uuid/v4` package:
|
66
|
-
|
66
|
+
137 bytes instead of 435.
|
67
67
|
3. Because of memory allocation tricks, Nano ID is 16% faster than UUID.
|
68
68
|
|
69
69
|
|
@@ -161,6 +161,9 @@ nanoid(10) //=> "IRFa-VaY2b"
|
|
161
161
|
Don’t forget to check the safety of your ID length
|
162
162
|
in our [ID collision probability] calculator.
|
163
163
|
|
164
|
+
You can also use [custom alphabet](#custom-alphabet-or-length)
|
165
|
+
or [random generator](#custom-random-bytes-generator).
|
166
|
+
|
164
167
|
[ID collision probability]: https://zelark.github.io/nano-id-cc/
|
165
168
|
|
166
169
|
|
@@ -173,13 +176,12 @@ between renders. This is bad code:
|
|
173
176
|
<Item key={nanoid()} /> /* DON’T DO IT */
|
174
177
|
```
|
175
178
|
|
176
|
-
This is good code. `
|
179
|
+
This is good code. `id` will be generated only once:
|
177
180
|
|
178
181
|
```jsx
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
}
|
182
|
+
const Element = () => {
|
183
|
+
const [id] = React.useState(nanoid)
|
184
|
+
return <Item key={id}>
|
183
185
|
}
|
184
186
|
```
|
185
187
|
|
@@ -248,7 +250,7 @@ probability.
|
|
248
250
|
|
249
251
|
```js
|
250
252
|
const nanoid = require('nanoid/non-secure')
|
251
|
-
|
253
|
+
nanoid() //=> "Uakgb_J5m9g-0JDMbcJqLJ"
|
252
254
|
```
|
253
255
|
|
254
256
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module.exports = function (random, alphabet, size) {
|
2
|
+
var mask = (2 << 31 - Math.clz32((alphabet.length - 1) | 1)) - 1
|
3
|
+
var step = Math.ceil(1.6 * mask * size / alphabet.length)
|
4
|
+
|
5
|
+
function tick (id) {
|
6
|
+
return random(step).then(function (bytes) {
|
7
|
+
var i = step
|
8
|
+
while (i--) {
|
9
|
+
id += alphabet[bytes[i] & mask] || ''
|
10
|
+
if (id.length === +size) return id
|
11
|
+
}
|
12
|
+
return tick(id)
|
13
|
+
})
|
14
|
+
}
|
15
|
+
|
16
|
+
return tick('')
|
17
|
+
}
|
package/async/format.js
CHANGED
@@ -29,18 +29,15 @@
|
|
29
29
|
* @function
|
30
30
|
*/
|
31
31
|
module.exports = function (random, alphabet, size) {
|
32
|
-
var mask = (2 <<
|
32
|
+
var mask = (2 << Math.log(alphabet.length - 1) / Math.LN2) - 1
|
33
33
|
var step = Math.ceil(1.6 * mask * size / alphabet.length)
|
34
|
-
size = +size
|
35
34
|
|
36
35
|
function tick (id) {
|
37
36
|
return random(step).then(function (bytes) {
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
if (id.length === size) return id
|
43
|
-
}
|
37
|
+
var i = step
|
38
|
+
while (i--) {
|
39
|
+
id += alphabet[bytes[i] & mask] || ''
|
40
|
+
if (id.length === +size) return id
|
44
41
|
}
|
45
42
|
return tick(id)
|
46
43
|
})
|
package/async/index.browser.js
CHANGED
@@ -4,7 +4,7 @@ var crypto = self.crypto || self.msCrypto
|
|
4
4
|
* This alphabet uses a-z A-Z 0-9 _- symbols.
|
5
5
|
* Symbols order was changed for better gzip compression.
|
6
6
|
*/
|
7
|
-
var url = '
|
7
|
+
var url = 'IUint8Ar21ModulvezGFYPCJ7_p0V4XSymbLBNH6fTqQ35xD9ZREghasOw-cjkWK'
|
8
8
|
|
9
9
|
module.exports = function (size) {
|
10
10
|
size = size || 21
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module.exports = function (random, alphabet, size) {
|
2
|
+
var mask = (2 << Math.log(alphabet.length - 1) / Math.LN2) - 1
|
3
|
+
var step = Math.ceil(1.6 * mask * size / alphabet.length)
|
4
|
+
var id = ''
|
5
|
+
|
6
|
+
while (true) {
|
7
|
+
var i = step
|
8
|
+
var bytes = random(i)
|
9
|
+
while (i--) {
|
10
|
+
id += alphabet[bytes[i] & mask] || ''
|
11
|
+
if (id.length === +size) return id
|
12
|
+
}
|
13
|
+
}
|
14
|
+
}
|
package/format.js
CHANGED
@@ -30,17 +30,13 @@ module.exports = function (random, alphabet, size) {
|
|
30
30
|
var mask = (2 << 31 - Math.clz32((alphabet.length - 1) | 1)) - 1
|
31
31
|
var step = Math.ceil(1.6 * mask * size / alphabet.length)
|
32
32
|
var id = ''
|
33
|
-
size = +size
|
34
33
|
|
35
34
|
while (true) {
|
36
|
-
var
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
if (
|
41
|
-
id += alpha
|
42
|
-
if (id.length === size) return id
|
43
|
-
}
|
35
|
+
var i = step
|
36
|
+
var bytes = random(i)
|
37
|
+
while (i--) {
|
38
|
+
id += alphabet[bytes[i] & mask] || ''
|
39
|
+
if (id.length === +size) return id
|
44
40
|
}
|
45
41
|
}
|
46
42
|
}
|
package/index.browser.js
CHANGED
@@ -20,7 +20,7 @@ var crypto = self.crypto || self.msCrypto
|
|
20
20
|
* This alphabet uses a-z A-Z 0-9 _- symbols.
|
21
21
|
* Symbols order was changed for better gzip compression.
|
22
22
|
*/
|
23
|
-
var url = '
|
23
|
+
var url = 'QLUint8ARdomValuesObj0h6345-79BCrypgJzHKTNYDSMkXPZ_FfG1WcqvwxEI2'
|
24
24
|
|
25
25
|
module.exports = function (size) {
|
26
26
|
size = size || 21
|
package/non-secure/index.js
CHANGED
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "nanoid",
|
3
|
-
"version": "2.1.
|
4
|
-
"description": "A tiny (
|
3
|
+
"version": "2.1.8",
|
4
|
+
"description": "A tiny (137 bytes), secure URL-friendly unique string ID generator",
|
5
5
|
"keywords": [
|
6
6
|
"uuid",
|
7
7
|
"random",
|
@@ -13,8 +13,10 @@
|
|
13
13
|
"repository": "ai/nanoid",
|
14
14
|
"browser": {
|
15
15
|
"./index.js": "./index.browser.js",
|
16
|
+
"./format.js": "./format.browser.js",
|
16
17
|
"./random.js": "./random.browser.js",
|
17
18
|
"./async/index.js": "./async/index.browser.js",
|
19
|
+
"./async/format.js": "./async/format.browser.js",
|
18
20
|
"./async/random.js": "./async/random.browser.js"
|
19
21
|
},
|
20
22
|
"react-native": {
|
@@ -26,6 +28,6 @@
|
|
26
28
|
],
|
27
29
|
"sharec": {
|
28
30
|
"config": "@logux/sharec-config",
|
29
|
-
"version": "0.5.
|
31
|
+
"version": "0.5.6"
|
30
32
|
}
|
31
33
|
}
|
package/url.js
CHANGED