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 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.** 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.
@@ -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
 
@@ -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. `this.id` will be generated only once:
179
+ This is good code. `id` will be generated only once:
180
180
 
181
181
  ```jsx
182
- id = nanoid()
183
- render () {
184
- return <Item key={this.id}>;
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
- var alpha = alphabet[bytes[i] & mask]
40
- if (alpha) {
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
  })
@@ -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 = -~(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.log(alphabet.length - 1) / Math.LN2) - 1
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
- var alpha = alphabet[bytes[i] & mask]
39
- if (alpha) {
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 = '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.5",
4
- "description": "A tiny (139 bytes), secure URL-friendly unique string ID generator",
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.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'