nanoid 2.1.5 → 2.1.9
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 +13 -0
- package/README.md +6 -7
- package/async/format.browser.js +17 -0
- package/async/format.js +2 -5
- package/async/index.browser.js +1 -1
- package/format.browser.js +14 -0
- package/format.js +3 -6
- 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,19 @@
|
|
1
1
|
# Change Log
|
2
2
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
3
3
|
|
4
|
+
## 2.1.9
|
5
|
+
* Reduce `format` and `async/format` size (by Dair Aidarkhanov).
|
6
|
+
|
7
|
+
## 2.1.8
|
8
|
+
* Improve React docs (by Nahum Zsilva).
|
9
|
+
|
10
|
+
## 2.1.7
|
11
|
+
* Reduce `index`, `async` and `non-secure` size (by @polemius).
|
12
|
+
|
13
|
+
## 2.1.6
|
14
|
+
* Reduce size (by Stas Lashmanov).
|
15
|
+
* Return fast mask for Node.js.
|
16
|
+
|
4
17
|
## 2.1.5
|
5
18
|
* Reduce size (by Max Graey).
|
6
19
|
* Fix IE support.
|
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.
|
@@ -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
|
|
@@ -176,13 +176,12 @@ between renders. This is bad code:
|
|
176
176
|
<Item key={nanoid()} /> /* DON’T DO IT */
|
177
177
|
```
|
178
178
|
|
179
|
-
This is good code. `
|
179
|
+
This is good code. `id` will be generated only once:
|
180
180
|
|
181
181
|
```jsx
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
}
|
182
|
+
const Element = () => {
|
183
|
+
const [id] = React.useState(nanoid)
|
184
|
+
return <Item key={id}>
|
186
185
|
}
|
187
186
|
```
|
188
187
|
|
@@ -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 = -~(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
@@ -36,11 +36,8 @@ module.exports = function (random, alphabet, size) {
|
|
36
36
|
return random(step).then(function (bytes) {
|
37
37
|
var i = step
|
38
38
|
while (i--) {
|
39
|
-
|
40
|
-
if (
|
41
|
-
id += alpha
|
42
|
-
if (id.length === +size) return id
|
43
|
-
}
|
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 = -~(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
@@ -27,7 +27,7 @@
|
|
27
27
|
* @function
|
28
28
|
*/
|
29
29
|
module.exports = function (random, alphabet, size) {
|
30
|
-
var mask = (2 << Math.
|
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
33
|
|
@@ -35,11 +35,8 @@ module.exports = function (random, alphabet, size) {
|
|
35
35
|
var i = step
|
36
36
|
var bytes = random(i)
|
37
37
|
while (i--) {
|
38
|
-
|
39
|
-
if (
|
40
|
-
id += alpha
|
41
|
-
if (id.length === +size) return id
|
42
|
-
}
|
38
|
+
id += alphabet[bytes[i] & mask] || ''
|
39
|
+
if (id.length === +size) return id
|
43
40
|
}
|
44
41
|
}
|
45
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.9",
|
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