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 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.** 139 bytes (minified and gzipped). No dependencies.
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
- var nanoid = require('nanoid')
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
- 139 bytes instead of 435.
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. `this.id` will be generated only once:
179
+ This is good code. `id` will be generated only once:
177
180
 
178
181
  ```jsx
179
- id = nanoid()
180
- render () {
181
- return <Item key={this.id}>;
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
- model.id = nanoid() //=> "Uakgb_J5m9g-0JDMbcJqLJ"
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 << 31 - Math.clz32((alphabet.length - 1) | 1)) - 1
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
- for (var i = step; i--;) {
39
- var byte = bytes[i] & mask
40
- if (alphabet[byte]) {
41
- id += alphabet[byte]
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
  })
@@ -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 = 'Uint8ArModuleSymbhasOw-012345679BCDEFGHIJKLNPQRTVWXYZ_cfgjkpqvxz'
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 bytes = random(step)
37
- for (var i = step; i--;) {
38
- var byte = bytes[i] & mask
39
- var alpha = alphabet[byte]
40
- if (alpha) {
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 = 'Uint8ArdomValuesObj012345679BCDEFGHIJKLMNPQRSTWXYZ_cfghkpqvwxyz-'
23
+ var url = 'QLUint8ARdomValuesObj0h6345-79BCrypgJzHKTNYDSMkXPZ_FfG1WcqvwxEI2'
24
24
 
25
25
  module.exports = function (size) {
26
26
  size = size || 21
@@ -1,4 +1,4 @@
1
- var url = 'bjectSymhasOwnProp-0123456789ABCDEFGHIJKLMNQRTUVWXYZ_dfgiklquvxz'
1
+ var url = 'sOwnPropMN49CEiq-hXvHJdSymlFURTag61GQfuD8YIWz2Zk5xKB7LV30_Abject'
2
2
 
3
3
  /**
4
4
  * Generate URL-friendly unique ID. This method use non-secure predictable
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nanoid",
3
- "version": "2.1.4",
4
- "description": "A tiny (139 bytes), secure URL-friendly unique string ID generator",
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.3"
31
+ "version": "0.5.6"
30
32
  }
31
33
  }
package/url.js CHANGED
@@ -12,4 +12,4 @@
12
12
  * generate(url, 10) //=> "Uakgb_J5m9"
13
13
  */
14
14
  module.exports =
15
- 'ModuleSymbhasOwnPr-0123456789ABCDEFGHIJKLNQRTUVWXYZ_cfgijkpqtvxz'
15
+ 'ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW'