uuid 2.0.3 → 11.1.1

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.
Files changed (205) hide show
  1. package/LICENSE.md +9 -2
  2. package/README.md +417 -112
  3. package/dist/cjs/index.d.ts +15 -0
  4. package/dist/cjs/index.js +31 -0
  5. package/dist/cjs/max.d.ts +2 -0
  6. package/dist/cjs/max.js +3 -0
  7. package/dist/cjs/md5.d.ts +4 -0
  8. package/dist/cjs/md5.js +13 -0
  9. package/dist/cjs/native.d.ts +6 -0
  10. package/dist/cjs/native.js +4 -0
  11. package/dist/cjs/nil.d.ts +2 -0
  12. package/dist/cjs/nil.js +3 -0
  13. package/dist/cjs/package.json +1 -0
  14. package/dist/cjs/parse.d.ts +2 -0
  15. package/dist/cjs/parse.js +11 -0
  16. package/dist/cjs/regex.d.ts +2 -0
  17. package/dist/cjs/regex.js +3 -0
  18. package/dist/cjs/rng.d.ts +1 -0
  19. package/dist/cjs/rng.js +13 -0
  20. package/dist/cjs/sha1.d.ts +4 -0
  21. package/dist/cjs/sha1.js +13 -0
  22. package/dist/cjs/stringify.d.ts +3 -0
  23. package/dist/cjs/stringify.js +39 -0
  24. package/dist/cjs/types.d.ts +21 -0
  25. package/dist/cjs/types.js +2 -0
  26. package/dist/cjs/uuid-bin.d.ts +1 -0
  27. package/dist/cjs/uuid-bin.js +72 -0
  28. package/dist/cjs/v1.d.ts +11 -0
  29. package/dist/cjs/v1.js +87 -0
  30. package/dist/cjs/v1ToV6.d.ts +2 -0
  31. package/dist/cjs/v1ToV6.js +13 -0
  32. package/dist/cjs/v3.d.ts +9 -0
  33. package/dist/cjs/v3.js +14 -0
  34. package/dist/cjs/v35.d.ts +7 -0
  35. package/dist/cjs/v35.js +44 -0
  36. package/dist/cjs/v4.d.ts +4 -0
  37. package/dist/cjs/v4.js +29 -0
  38. package/dist/cjs/v5.d.ts +9 -0
  39. package/dist/cjs/v5.js +14 -0
  40. package/dist/cjs/v6.d.ts +4 -0
  41. package/dist/cjs/v6.js +22 -0
  42. package/dist/cjs/v6ToV1.d.ts +2 -0
  43. package/dist/cjs/v6ToV1.js +13 -0
  44. package/dist/cjs/v7.d.ts +9 -0
  45. package/dist/cjs/v7.js +69 -0
  46. package/dist/cjs/validate.d.ts +2 -0
  47. package/dist/cjs/validate.js +7 -0
  48. package/dist/cjs/version.d.ts +2 -0
  49. package/dist/cjs/version.js +10 -0
  50. package/dist/cjs-browser/index.d.ts +15 -0
  51. package/dist/cjs-browser/index.js +31 -0
  52. package/dist/cjs-browser/max.d.ts +2 -0
  53. package/dist/cjs-browser/max.js +3 -0
  54. package/dist/cjs-browser/md5.d.ts +2 -0
  55. package/dist/cjs-browser/md5.js +137 -0
  56. package/dist/cjs-browser/native.d.ts +4 -0
  57. package/dist/cjs-browser/native.js +4 -0
  58. package/dist/cjs-browser/nil.d.ts +2 -0
  59. package/dist/cjs-browser/nil.js +3 -0
  60. package/dist/cjs-browser/package.json +1 -0
  61. package/dist/cjs-browser/parse.d.ts +2 -0
  62. package/dist/cjs-browser/parse.js +11 -0
  63. package/dist/cjs-browser/regex.d.ts +2 -0
  64. package/dist/cjs-browser/regex.js +3 -0
  65. package/dist/cjs-browser/rng.d.ts +1 -0
  66. package/dist/cjs-browser/rng.js +14 -0
  67. package/dist/cjs-browser/sha1.d.ts +2 -0
  68. package/dist/cjs-browser/sha1.js +72 -0
  69. package/dist/cjs-browser/stringify.d.ts +3 -0
  70. package/dist/cjs-browser/stringify.js +39 -0
  71. package/dist/cjs-browser/types.d.ts +21 -0
  72. package/dist/cjs-browser/types.js +2 -0
  73. package/dist/cjs-browser/uuid-bin.d.ts +1 -0
  74. package/dist/cjs-browser/uuid-bin.js +72 -0
  75. package/dist/cjs-browser/v1.d.ts +11 -0
  76. package/dist/cjs-browser/v1.js +87 -0
  77. package/dist/cjs-browser/v1ToV6.d.ts +2 -0
  78. package/dist/cjs-browser/v1ToV6.js +13 -0
  79. package/dist/cjs-browser/v3.d.ts +9 -0
  80. package/dist/cjs-browser/v3.js +14 -0
  81. package/dist/cjs-browser/v35.d.ts +7 -0
  82. package/dist/cjs-browser/v35.js +44 -0
  83. package/dist/cjs-browser/v4.d.ts +4 -0
  84. package/dist/cjs-browser/v4.js +29 -0
  85. package/dist/cjs-browser/v5.d.ts +9 -0
  86. package/dist/cjs-browser/v5.js +14 -0
  87. package/dist/cjs-browser/v6.d.ts +4 -0
  88. package/dist/cjs-browser/v6.js +22 -0
  89. package/dist/cjs-browser/v6ToV1.d.ts +2 -0
  90. package/dist/cjs-browser/v6ToV1.js +13 -0
  91. package/dist/cjs-browser/v7.d.ts +9 -0
  92. package/dist/cjs-browser/v7.js +69 -0
  93. package/dist/cjs-browser/validate.d.ts +2 -0
  94. package/dist/cjs-browser/validate.js +7 -0
  95. package/dist/cjs-browser/version.d.ts +2 -0
  96. package/dist/cjs-browser/version.js +10 -0
  97. package/dist/esm/bin/uuid +2 -0
  98. package/dist/esm/index.d.ts +15 -0
  99. package/dist/esm/index.js +14 -0
  100. package/dist/esm/max.d.ts +2 -0
  101. package/dist/esm/max.js +1 -0
  102. package/dist/esm/md5.d.ts +4 -0
  103. package/dist/esm/md5.js +11 -0
  104. package/dist/esm/native.d.ts +6 -0
  105. package/dist/esm/native.js +2 -0
  106. package/dist/esm/nil.d.ts +2 -0
  107. package/dist/esm/nil.js +1 -0
  108. package/dist/esm/parse.d.ts +2 -0
  109. package/dist/esm/parse.js +9 -0
  110. package/dist/esm/regex.d.ts +2 -0
  111. package/dist/esm/regex.js +1 -0
  112. package/dist/esm/rng.d.ts +1 -0
  113. package/dist/esm/rng.js +10 -0
  114. package/dist/esm/sha1.d.ts +4 -0
  115. package/dist/esm/sha1.js +11 -0
  116. package/dist/esm/stringify.d.ts +3 -0
  117. package/dist/esm/stringify.js +35 -0
  118. package/dist/esm/types.d.ts +21 -0
  119. package/dist/esm/types.js +1 -0
  120. package/dist/esm/uuid-bin.d.ts +1 -0
  121. package/dist/esm/uuid-bin.js +70 -0
  122. package/dist/esm/v1.d.ts +11 -0
  123. package/dist/esm/v1.js +83 -0
  124. package/dist/esm/v1ToV6.d.ts +2 -0
  125. package/dist/esm/v1ToV6.js +10 -0
  126. package/dist/esm/v3.d.ts +9 -0
  127. package/dist/esm/v3.js +9 -0
  128. package/dist/esm/v35.d.ts +7 -0
  129. package/dist/esm/v35.js +39 -0
  130. package/dist/esm/v4.d.ts +4 -0
  131. package/dist/esm/v4.js +27 -0
  132. package/dist/esm/v5.d.ts +9 -0
  133. package/dist/esm/v5.js +9 -0
  134. package/dist/esm/v6.d.ts +4 -0
  135. package/dist/esm/v6.js +20 -0
  136. package/dist/esm/v6ToV1.d.ts +2 -0
  137. package/dist/esm/v6ToV1.js +10 -0
  138. package/dist/esm/v7.d.ts +9 -0
  139. package/dist/esm/v7.js +65 -0
  140. package/dist/esm/validate.d.ts +2 -0
  141. package/dist/esm/validate.js +5 -0
  142. package/dist/esm/version.d.ts +2 -0
  143. package/dist/esm/version.js +8 -0
  144. package/dist/esm-browser/index.d.ts +15 -0
  145. package/dist/esm-browser/index.js +14 -0
  146. package/dist/esm-browser/max.d.ts +2 -0
  147. package/dist/esm-browser/max.js +1 -0
  148. package/dist/esm-browser/md5.d.ts +2 -0
  149. package/dist/esm-browser/md5.js +135 -0
  150. package/dist/esm-browser/native.d.ts +4 -0
  151. package/dist/esm-browser/native.js +2 -0
  152. package/dist/esm-browser/nil.d.ts +2 -0
  153. package/dist/esm-browser/nil.js +1 -0
  154. package/dist/esm-browser/parse.d.ts +2 -0
  155. package/dist/esm-browser/parse.js +9 -0
  156. package/dist/esm-browser/regex.d.ts +2 -0
  157. package/dist/esm-browser/regex.js +1 -0
  158. package/dist/esm-browser/rng.d.ts +1 -0
  159. package/dist/esm-browser/rng.js +11 -0
  160. package/dist/esm-browser/sha1.d.ts +2 -0
  161. package/dist/esm-browser/sha1.js +70 -0
  162. package/dist/esm-browser/stringify.d.ts +3 -0
  163. package/dist/esm-browser/stringify.js +35 -0
  164. package/dist/esm-browser/types.d.ts +21 -0
  165. package/dist/esm-browser/types.js +1 -0
  166. package/dist/esm-browser/uuid-bin.d.ts +1 -0
  167. package/dist/esm-browser/uuid-bin.js +70 -0
  168. package/dist/esm-browser/v1.d.ts +11 -0
  169. package/dist/esm-browser/v1.js +83 -0
  170. package/dist/esm-browser/v1ToV6.d.ts +2 -0
  171. package/dist/esm-browser/v1ToV6.js +10 -0
  172. package/dist/esm-browser/v3.d.ts +9 -0
  173. package/dist/esm-browser/v3.js +9 -0
  174. package/dist/esm-browser/v35.d.ts +7 -0
  175. package/dist/esm-browser/v35.js +39 -0
  176. package/dist/esm-browser/v4.d.ts +4 -0
  177. package/dist/esm-browser/v4.js +27 -0
  178. package/dist/esm-browser/v5.d.ts +9 -0
  179. package/dist/esm-browser/v5.js +9 -0
  180. package/dist/esm-browser/v6.d.ts +4 -0
  181. package/dist/esm-browser/v6.js +20 -0
  182. package/dist/esm-browser/v6ToV1.d.ts +2 -0
  183. package/dist/esm-browser/v6ToV1.js +10 -0
  184. package/dist/esm-browser/v7.d.ts +9 -0
  185. package/dist/esm-browser/v7.js +65 -0
  186. package/dist/esm-browser/validate.d.ts +2 -0
  187. package/dist/esm-browser/validate.js +5 -0
  188. package/dist/esm-browser/version.d.ts +2 -0
  189. package/dist/esm-browser/version.js +8 -0
  190. package/package.json +116 -30
  191. package/.npmignore +0 -2
  192. package/.travis.yml +0 -5
  193. package/benchmark/README.md +0 -53
  194. package/benchmark/bench.gnu +0 -174
  195. package/benchmark/bench.sh +0 -34
  196. package/benchmark/benchmark-native.c +0 -34
  197. package/benchmark/benchmark.js +0 -84
  198. package/benchmark/package.json +0 -9
  199. package/misc/compare.js +0 -62
  200. package/misc/perf.js +0 -102
  201. package/rng-browser.js +0 -32
  202. package/rng.js +0 -4
  203. package/test/mocha.opts +0 -1
  204. package/test/test.js +0 -105
  205. package/uuid.js +0 -183
package/LICENSE.md CHANGED
@@ -1,2 +1,9 @@
1
- Copyright (c) 2010-2012 Robert Kieffer
2
- MIT License - http://opensource.org/licenses/mit-license.php
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2010-2020 Robert Kieffer and other contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md CHANGED
@@ -1,205 +1,510 @@
1
- # uuid [![Build Status](https://secure.travis-ci.org/defunctzombie/node-uuid.svg?branch=master)](http://travis-ci.org/defunctzombie/node-uuid) #
1
+ <!--
2
+ -- This file is auto-generated from README_js.md. Changes should be made there.
3
+ -->
2
4
 
3
- [![browser support](https://ci.testling.com/defunctzombie/node-uuid.png)](https://ci.testling.com/defunctzombie/node-uuid)
5
+ # uuid [![CI](https://github.com/uuidjs/uuid/workflows/CI/badge.svg)](https://github.com/uuidjs/uuid/actions?query=workflow%3ACI) [![Browser](https://github.com/uuidjs/uuid/workflows/Browser/badge.svg)](https://github.com/uuidjs/uuid/actions/workflows/browser.yml)
4
6
 
5
- Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.
7
+ For the creation of [RFC9562](https://www.rfc-editor.org/rfc/rfc9562.html) (formerly [RFC4122](https://www.rfc-editor.org/rfc/rfc4122.html)) UUIDs
6
8
 
7
- Features:
9
+ - **Complete** - Support for all RFC9562 UUID versions
10
+ - **Cross-platform** - Support for...
11
+ - ESM & Common JS
12
+ - [Typescript](#support)
13
+ - [Chrome, Safari, Firefox, and Edge](#support)
14
+ - [NodeJS](#support)
15
+ - [React Native / Expo](#react-native--expo)
16
+ - **Secure** - Uses modern `crypto` API for random values
17
+ - **Compact** - Zero-dependency, [tree-shakable](https://developer.mozilla.org/en-US/docs/Glossary/Tree_shaking)
18
+ - **CLI** - [`uuid` command line](#command-line) utility
8
19
 
9
- * Generate RFC4122 version 1 or version 4 UUIDs
10
- * Runs in node.js and all browsers.
11
- * Cryptographically strong random # generation on supporting platforms
12
- * 1185 bytes minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )
13
- * [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)
20
+ <!-- prettier-ignore -->
21
+ > [!NOTE]
22
+ > `uuid@11` is now available: See the [CHANGELOG](./CHANGELOG.md) for details. TL;DR:
23
+ > * TypeScript support is now included (remove `@types/uuid` from your dependencies)
24
+ > * Subtle changes to how the `options` arg is interpreted for `v1()`, `v6()`, and `v7()`. [See details](#options-handling-for-timestamp-uuids)
25
+ > * Binary UUIDs are now `Uint8Array`s. (May impact callers of `parse()`, `stringify()`, or that pass an `option#buf` argument to `v1()`-`v7()`.)
14
26
 
15
- ## Getting Started
27
+ ## Quickstart
16
28
 
17
- Install it in your browser:
29
+ **1. Install**
18
30
 
19
- ```html
20
- <script src="uuid.js"></script>
31
+ ```shell
32
+ npm install uuid
21
33
  ```
22
34
 
23
- Or in node.js:
35
+ **2. Create a UUID**
36
+
37
+ ESM-syntax (must use named exports):
24
38
 
39
+ ```javascript
40
+ import { v4 as uuidv4 } from 'uuid';
41
+ uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
25
42
  ```
26
- npm install uuid
43
+
44
+ ... CommonJS:
45
+
46
+ ```javascript
47
+ const { v4: uuidv4 } = require('uuid');
48
+ uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
27
49
  ```
28
50
 
51
+ For timestamp UUIDs, namespace UUIDs, and other options read on ...
52
+
53
+ ## API Summary
54
+
55
+ | | | |
56
+ | --- | --- | --- |
57
+ | [`uuid.NIL`](#uuidnil) | The nil UUID string (all zeros) | New in `uuid@8.3` |
58
+ | [`uuid.MAX`](#uuidmax) | The max UUID string (all ones) | New in `uuid@9.1` |
59
+ | [`uuid.parse()`](#uuidparsestr) | Convert UUID string to array of bytes | New in `uuid@8.3` |
60
+ | [`uuid.stringify()`](#uuidstringifyarr-offset) | Convert array of bytes to UUID string | New in `uuid@8.3` |
61
+ | [`uuid.v1()`](#uuidv1options-buffer-offset) | Create a version 1 (timestamp) UUID | |
62
+ | [`uuid.v1ToV6()`](#uuidv1tov6uuid) | Create a version 6 UUID from a version 1 UUID | New in `uuid@10` |
63
+ | [`uuid.v3()`](#uuidv3name-namespace-buffer-offset) | Create a version 3 (namespace w/ MD5) UUID | |
64
+ | [`uuid.v4()`](#uuidv4options-buffer-offset) | Create a version 4 (random) UUID | |
65
+ | [`uuid.v5()`](#uuidv5name-namespace-buffer-offset) | Create a version 5 (namespace w/ SHA-1) UUID | |
66
+ | [`uuid.v6()`](#uuidv6options-buffer-offset) | Create a version 6 (timestamp, reordered) UUID | New in `uuid@10` |
67
+ | [`uuid.v6ToV1()`](#uuidv6tov1uuid) | Create a version 1 UUID from a version 6 UUID | New in `uuid@10` |
68
+ | [`uuid.v7()`](#uuidv7options-buffer-offset) | Create a version 7 (Unix Epoch time-based) UUID | New in `uuid@10` |
69
+ | ~~[`uuid.v8()`](#uuidv8)~~ | "Intentionally left blank" | |
70
+ | [`uuid.validate()`](#uuidvalidatestr) | Test a string to see if it is a valid UUID | New in `uuid@8.3` |
71
+ | [`uuid.version()`](#uuidversionstr) | Detect RFC version of a UUID | New in `uuid@8.3` |
72
+
73
+ ## API
74
+
75
+ ### uuid.NIL
76
+
77
+ The nil UUID string (all zeros).
78
+
79
+ Example:
80
+
29
81
  ```javascript
30
- var uuid = require('uuid');
82
+ import { NIL as NIL_UUID } from 'uuid';
31
83
 
32
- // Generate a v1 (time-based) id
33
- uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'
84
+ NIL_UUID; // '00000000-0000-0000-0000-000000000000'
85
+ ```
86
+
87
+ ### uuid.MAX
88
+
89
+ The max UUID string (all ones).
90
+
91
+ Example:
92
+
93
+ ```javascript
94
+ import { MAX as MAX_UUID } from 'uuid';
34
95
 
35
- // Generate a v4 (random) id
36
- uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'
96
+ MAX_UUID; // 'ffffffff-ffff-ffff-ffff-ffffffffffff'
37
97
  ```
38
98
 
39
- ## API
99
+ ### uuid.parse(str)
100
+
101
+ Convert UUID string to array of bytes
102
+
103
+ | | |
104
+ | --------- | ---------------------------------------- |
105
+ | `str` | A valid UUID `String` |
106
+ | _returns_ | `Uint8Array[16]` |
107
+ | _throws_ | `TypeError` if `str` is not a valid UUID |
108
+
109
+ <!-- prettier-ignore -->
110
+ > [!NOTE]
111
+ > Ordering of values in the byte arrays used by `parse()` and `stringify()` follows the left &Rarr; right order of hex-pairs in UUID strings. As shown in the example below.
112
+
113
+ Example:
40
114
 
41
- ### uuid.v1([`options` [, `buffer` [, `offset`]]])
115
+ ```javascript
116
+ import { parse as uuidParse } from 'uuid';
117
+
118
+ // Parse a UUID
119
+ uuidParse('6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b'); // ⇨
120
+ // Uint8Array(16) [
121
+ // 110, 192, 189, 127, 17,
122
+ // 192, 67, 218, 151, 94,
123
+ // 42, 138, 217, 235, 174,
124
+ // 11
125
+ // ]
126
+ ```
127
+
128
+ ### uuid.stringify(arr[, offset])
129
+
130
+ Convert array of bytes to UUID string
42
131
 
43
- Generate and return a RFC4122 v1 (timestamp-based) UUID.
132
+ | | |
133
+ | -------------- | ---------------------------------------------------------------------------- |
134
+ | `arr` | `Array`-like collection of 16 values (starting from `offset`) between 0-255. |
135
+ | [`offset` = 0] | `Number` Starting index in the Array |
136
+ | _returns_ | `String` |
137
+ | _throws_ | `TypeError` if a valid UUID string cannot be generated |
138
+
139
+ <!-- prettier-ignore -->
140
+ > [!NOTE]
141
+ > Ordering of values in the byte arrays used by `parse()` and `stringify()` follows the left &Rarr; right order of hex-pairs in UUID strings. As shown in the example below.
142
+
143
+ Example:
44
144
 
45
- * `options` - (Object) Optional uuid state to apply. Properties may include:
145
+ ```javascript
146
+ import { stringify as uuidStringify } from 'uuid';
147
+
148
+ const uuidBytes = Uint8Array.of(
149
+ 0x6e,
150
+ 0xc0,
151
+ 0xbd,
152
+ 0x7f,
153
+ 0x11,
154
+ 0xc0,
155
+ 0x43,
156
+ 0xda,
157
+ 0x97,
158
+ 0x5e,
159
+ 0x2a,
160
+ 0x8a,
161
+ 0xd9,
162
+ 0xeb,
163
+ 0xae,
164
+ 0x0b
165
+ );
166
+
167
+ uuidStringify(uuidBytes); // ⇨ '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b'
168
+ ```
46
169
 
47
- * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.
48
- * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.
49
- * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.
50
- * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.
170
+ ### uuid.v1([options[, buffer[, offset]]])
51
171
 
52
- * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.
53
- * `offset` - (Number) Starting index in `buffer` at which to begin writing.
172
+ Create an RFC version 1 (timestamp) UUID
54
173
 
55
- Returns `buffer`, if specified, otherwise the string form of the UUID
174
+ | | |
175
+ | --- | --- |
176
+ | [`options`] | `Object` with one or more of the following properties: |
177
+ | [`options.node = (random)` ] | RFC "node" field as an `Array[6]` of byte values (per 4.1.6) |
178
+ | [`options.clockseq = (random)`] | RFC "clock sequence" as a `Number` between 0 - 0x3fff |
179
+ | [`options.msecs = (current time)`] | RFC "timestamp" field (`Number` of milliseconds, unix epoch) |
180
+ | [`options.nsecs = 0`] | RFC "timestamp" field (`Number` of nanoseconds to add to `msecs`, should be 0-10,000) |
181
+ | [`options.random = (random)`] | `Array` of 16 random bytes (0-255) used to generate other fields, above |
182
+ | [`options.rng`] | Alternative to `options.random`, a `Function` that returns an `Array` of 16 random bytes (0-255) |
183
+ | [`buffer`] | `Uint8Array` or `Uint8Array` subtype (e.g. Node.js `Buffer`). If provided, binary UUID is written into the array, starting at `offset` |
184
+ | [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` |
185
+ | _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` |
186
+ | _throws_ | `Error` if more than 10M UUIDs/sec are requested |
56
187
 
57
- Notes:
188
+ <!-- prettier-ignore -->
189
+ > [!NOTE]
190
+ > The default [node id](https://datatracker.ietf.org/doc/html/rfc9562#section-5.1) (the last 12 digits in the UUID) is generated once, randomly, on process startup, and then remains unchanged for the duration of the process.
58
191
 
59
- 1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)
192
+ <!-- prettier-ignore -->
193
+ > [!NOTE]
194
+ > `options.random` and `options.rng` are only meaningful on the very first call to `v1()`, where they may be passed to initialize the internal `node` and `clockseq` fields.
60
195
 
61
- Example: Generate string UUID with fully-specified options
196
+ Example:
62
197
 
63
198
  ```javascript
64
- uuid.v1({
65
- node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
199
+ import { v1 as uuidv1 } from 'uuid';
200
+
201
+ uuidv1(); // ⇨ '2c5ea4c0-4067-11e9-9bdd-2b0d7b3dcb6d'
202
+ ```
203
+
204
+ Example using `options`:
205
+
206
+ ```javascript
207
+ import { v1 as uuidv1 } from 'uuid';
208
+
209
+ const options = {
210
+ node: Uint8Array.of(0x01, 0x23, 0x45, 0x67, 0x89, 0xab),
66
211
  clockseq: 0x1234,
67
212
  msecs: new Date('2011-11-01').getTime(),
68
- nsecs: 5678
69
- }); // -> "710b962e-041c-11e1-9234-0123456789ab"
213
+ nsecs: 5678,
214
+ };
215
+ uuidv1(options); // ⇨ '710b962e-041c-11e1-9234-0123456789ab'
70
216
  ```
71
217
 
72
- Example: In-place generation of two binary IDs
218
+ ### uuid.v1ToV6(uuid)
219
+
220
+ Convert a UUID from version 1 to version 6
73
221
 
74
222
  ```javascript
75
- // Generate two ids in an array
76
- var arr = new Array(32); // -> []
77
- uuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]
78
- uuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]
223
+ import { v1ToV6 } from 'uuid';
79
224
 
80
- // Optionally use uuid.unparse() to get stringify the ids
81
- uuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115'
82
- uuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115'
225
+ v1ToV6('92f62d9e-22c4-11ef-97e9-325096b39f47'); // '1ef22c49-2f62-6d9e-97e9-325096b39f47'
83
226
  ```
84
227
 
85
- ### uuid.v4([`options` [, `buffer` [, `offset`]]])
228
+ ### uuid.v3(name, namespace[, buffer[, offset]])
86
229
 
87
- Generate and return a RFC4122 v4 UUID.
230
+ Create an RFC version 3 (namespace w/ MD5) UUID
88
231
 
89
- * `options` - (Object) Optional uuid state to apply. Properties may include:
232
+ API is identical to `v5()`, but uses "v3" instead.
90
233
 
91
- * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values
92
- * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.
234
+ <!-- prettier-ignore -->
235
+ > [!IMPORTANT]
236
+ > Per the RFC, "_If backward compatibility is not an issue, SHA-1 [Version 5] is preferred_."
93
237
 
94
- * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.
95
- * `offset` - (Number) Starting index in `buffer` at which to begin writing.
238
+ ### uuid.v4([options[, buffer[, offset]]])
96
239
 
97
- Returns `buffer`, if specified, otherwise the string form of the UUID
240
+ Create an RFC version 4 (random) UUID
98
241
 
99
- Example: Generate string UUID with fully-specified options
242
+ | | |
243
+ | --- | --- |
244
+ | [`options`] | `Object` with one or more of the following properties: |
245
+ | [`options.random`] | `Array` of 16 random bytes (0-255) |
246
+ | [`options.rng`] | Alternative to `options.random`, a `Function` that returns an `Array` of 16 random bytes (0-255) |
247
+ | [`buffer`] | `Uint8Array` or `Uint8Array` subtype (e.g. Node.js `Buffer`). If provided, binary UUID is written into the array, starting at `offset` |
248
+ | [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` |
249
+ | _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` |
250
+
251
+ Example:
100
252
 
101
253
  ```javascript
102
- uuid.v4({
103
- random: [
104
- 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,
105
- 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36
106
- ]
107
- });
108
- // -> "109156be-c4fb-41ea-b1b4-efe1671c5836"
254
+ import { v4 as uuidv4 } from 'uuid';
255
+
256
+ uuidv4(); // '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
109
257
  ```
110
258
 
111
- Example: Generate two IDs in a single buffer
259
+ Example using predefined `random` values:
112
260
 
113
261
  ```javascript
114
- var buffer = new Array(32); // (or 'new Buffer' in node.js)
115
- uuid.v4(null, buffer, 0);
116
- uuid.v4(null, buffer, 16);
262
+ import { v4 as uuidv4 } from 'uuid';
263
+
264
+ const v4options = {
265
+ random: Uint8Array.of(
266
+ 0x10,
267
+ 0x91,
268
+ 0x56,
269
+ 0xbe,
270
+ 0xc4,
271
+ 0xfb,
272
+ 0xc1,
273
+ 0xea,
274
+ 0x71,
275
+ 0xb4,
276
+ 0xef,
277
+ 0xe1,
278
+ 0x67,
279
+ 0x1c,
280
+ 0x58,
281
+ 0x36
282
+ ),
283
+ };
284
+ uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836'
117
285
  ```
118
286
 
119
- ### uuid.parse(id[, buffer[, offset]])
120
- ### uuid.unparse(buffer[, offset])
287
+ ### uuid.v5(name, namespace[, buffer[, offset]])
121
288
 
122
- Parse and unparse UUIDs
289
+ Create an RFC version 5 (namespace w/ SHA-1) UUID
123
290
 
124
- * `id` - (String) UUID(-like) string
125
- * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used
126
- * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0
291
+ | | |
292
+ | --- | --- |
293
+ | `name` | `String \| Array` |
294
+ | `namespace` | `String \| Array[16]` Namespace UUID |
295
+ | [`buffer`] | `Uint8Array` or `Uint8Array` subtype (e.g. Node.js `Buffer`). If provided, binary UUID is written into the array, starting at `offset` |
296
+ | [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` |
297
+ | _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` |
127
298
 
128
- Example parsing and unparsing a UUID string
299
+ <!-- prettier-ignore -->
300
+ > [!NOTE]
301
+ > The RFC `DNS` and `URL` namespaces are available as `v5.DNS` and `v5.URL`.
302
+
303
+ Example with custom namespace:
129
304
 
130
305
  ```javascript
131
- var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10>
132
- var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'
306
+ import { v5 as uuidv5 } from 'uuid';
307
+
308
+ // Define a custom namespace. Readers, create your own using something like
309
+ // https://www.uuidgenerator.net/
310
+ const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341';
311
+
312
+ uuidv5('Hello, World!', MY_NAMESPACE); // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681'
133
313
  ```
134
314
 
135
- ### uuid.noConflict()
315
+ Example with RFC `URL` namespace:
136
316
 
137
- (Browsers only) Set `uuid` property back to it's previous value.
317
+ ```javascript
318
+ import { v5 as uuidv5 } from 'uuid';
138
319
 
139
- Returns the uuid object.
320
+ uuidv5('https://www.w3.org/', uuidv5.URL); // ⇨ 'c106a26a-21bb-5538-8bf2-57095d1976c1'
321
+ ```
140
322
 
141
- Example:
323
+ ### uuid.v6([options[, buffer[, offset]]])
324
+
325
+ Create an RFC version 6 (timestamp, reordered) UUID
326
+
327
+ This method takes the same arguments as uuid.v1().
142
328
 
143
329
  ```javascript
144
- var myUuid = uuid.noConflict();
145
- myUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'
330
+ import { v6 as uuidv6 } from 'uuid';
331
+
332
+ uuidv6(); // ⇨ '1e940672-c5ea-64c0-9b5d-ab8dfbbd4bed'
146
333
  ```
147
334
 
148
- ## Deprecated APIs
335
+ Example using `options`:
149
336
 
150
- Support for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.
337
+ ```javascript
338
+ import { v6 as uuidv6 } from 'uuid';
151
339
 
152
- ### uuid([format [, buffer [, offset]]])
340
+ const options = {
341
+ node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
342
+ clockseq: 0x1234,
343
+ msecs: new Date('2011-11-01').getTime(),
344
+ nsecs: 5678,
345
+ };
346
+ uuidv6(options); // ⇨ '1e1041c7-10b9-662e-9234-0123456789ab'
347
+ ```
153
348
 
154
- uuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).
349
+ ### uuid.v6ToV1(uuid)
155
350
 
156
- ## Testing
351
+ Convert a UUID from version 6 to version 1
157
352
 
158
- In node.js
353
+ ```javascript
354
+ import { v6ToV1 } from 'uuid';
159
355
 
356
+ v6ToV1('1ef22c49-2f62-6d9e-97e9-325096b39f47'); // ⇨ '92f62d9e-22c4-11ef-97e9-325096b39f47'
160
357
  ```
161
- > cd test
162
- > node test.js
358
+
359
+ ### uuid.v7([options[, buffer[, offset]]])
360
+
361
+ Create an RFC version 7 (random) UUID
362
+
363
+ | | |
364
+ | --- | --- |
365
+ | [`options`] | `Object` with one or more of the following properties: |
366
+ | [`options.msecs = (current time)`] | RFC "timestamp" field (`Number` of milliseconds, unix epoch) |
367
+ | [`options.random = (random)`] | `Array` of 16 random bytes (0-255) used to generate other fields, above |
368
+ | [`options.rng`] | Alternative to `options.random`, a `Function` that returns an `Array` of 16 random bytes (0-255) |
369
+ | [`options.seq = (random)`] | 32-bit sequence `Number` between 0 - 0xffffffff. This may be provided to help ensure uniqueness for UUIDs generated within the same millisecond time interval. Default = random value. |
370
+ | [`buffer`] | `Uint8Array` or `Uint8Array` subtype (e.g. Node.js `Buffer`). If provided, binary UUID is written into the array, starting at `offset` |
371
+ | [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` |
372
+ | _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` |
373
+
374
+ Example:
375
+
376
+ ```javascript
377
+ import { v7 as uuidv7 } from 'uuid';
378
+
379
+ uuidv7(); // ⇨ '01695553-c90c-705a-b56d-778dfbbd4bed'
380
+ ```
381
+
382
+ ### ~~uuid.v8()~~
383
+
384
+ **_"Intentionally left blank"_**
385
+
386
+ <!-- prettier-ignore -->
387
+ > [!NOTE]
388
+ > Version 8 (experimental) UUIDs are "[for experimental or vendor-specific use cases](https://www.rfc-editor.org/rfc/rfc9562.html#name-uuid-version-8)". The RFC does not define a creation algorithm for them, which is why this package does not offer a `v8()` method. The `validate()` and `version()` methods do work with such UUIDs, however.
389
+
390
+ ### uuid.validate(str)
391
+
392
+ Test a string to see if it is a valid UUID
393
+
394
+ | | |
395
+ | --------- | --------------------------------------------------- |
396
+ | `str` | `String` to validate |
397
+ | _returns_ | `true` if string is a valid UUID, `false` otherwise |
398
+
399
+ Example:
400
+
401
+ ```javascript
402
+ import { validate as uuidValidate } from 'uuid';
403
+
404
+ uuidValidate('not a UUID'); // ⇨ false
405
+ uuidValidate('6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b'); // ⇨ true
163
406
  ```
164
407
 
165
- In Browser
408
+ Using `validate` and `version` together it is possible to do per-version validation, e.g. validate for only v4 UUIds.
409
+
410
+ ```javascript
411
+ import { version as uuidVersion } from 'uuid';
412
+ import { validate as uuidValidate } from 'uuid';
166
413
 
414
+ function uuidValidateV4(uuid) {
415
+ return uuidValidate(uuid) && uuidVersion(uuid) === 4;
416
+ }
417
+
418
+ const v1Uuid = 'd9428888-122b-11e1-b85c-61cd3cbb3210';
419
+ const v4Uuid = '109156be-c4fb-41ea-b1b4-efe1671c5836';
420
+
421
+ uuidValidateV4(v4Uuid); // ⇨ true
422
+ uuidValidateV4(v1Uuid); // ⇨ false
167
423
  ```
168
- open test/test.html
424
+
425
+ ### uuid.version(str)
426
+
427
+ Detect RFC version of a UUID
428
+
429
+ | | |
430
+ | --------- | ---------------------------------------- |
431
+ | `str` | A valid UUID `String` |
432
+ | _returns_ | `Number` The RFC version of the UUID |
433
+ | _throws_ | `TypeError` if `str` is not a valid UUID |
434
+
435
+ Example:
436
+
437
+ ```javascript
438
+ import { version as uuidVersion } from 'uuid';
439
+
440
+ uuidVersion('45637ec4-c85f-11ea-87d0-0242ac130003'); // ⇨ 1
441
+ uuidVersion('6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b'); // ⇨ 4
169
442
  ```
170
443
 
171
- ### Benchmarking
444
+ <!-- prettier-ignore -->
445
+ > [!NOTE]
446
+ > This method returns `0` for the `NIL` UUID, and `15` for the `MAX` UUID.
172
447
 
173
- Requires node.js
448
+ ## Command Line
174
449
 
450
+ UUIDs can be generated from the command line using `uuid`.
451
+
452
+ ```shell
453
+ $ npx uuid
454
+ ddeb27fb-d9a0-4624-be4d-4615062daed4
175
455
  ```
176
- cd benchmark/
177
- npm install
178
- node benchmark.js
456
+
457
+ The default is to generate version 4 UUIDS, however the other versions are supported. Type `uuid --help` for details:
458
+
459
+ ```shell
460
+ $ npx uuid --help
461
+
462
+ Usage:
463
+ uuid
464
+ uuid v1
465
+ uuid v3 <name> <namespace uuid>
466
+ uuid v4
467
+ uuid v5 <name> <namespace uuid>
468
+ uuid v7
469
+ uuid --help
470
+
471
+ Note: <namespace uuid> may be "URL" or "DNS" to use the corresponding UUIDs
472
+ defined by RFC9562
179
473
  ```
180
474
 
181
- For a more complete discussion of uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/uuid/wiki/Benchmark)
475
+ ## `options` Handling for Timestamp UUIDs
476
+
477
+ Prior to `uuid@11`, it was possible for `options` state to interfere with the internal state used to ensure uniqueness of timestamp-based UUIDs (the `v1()`, `v6()`, and `v7()` methods). Starting with `uuid@11`, this issue has been addressed by using the presence of the `options` argument as a flag to select between two possible behaviors:
478
+
479
+ - Without `options`: Internal state is utilized to improve UUID uniqueness.
480
+ - With `options`: Internal state is **NOT** used and, instead, appropriate defaults are applied as needed.
182
481
 
183
- For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).
482
+ ## Support
184
483
 
185
- ## Release notes
484
+ **Browsers**: `uuid` [builds are tested](/uuidjs/uuid/blob/main/wdio.conf.js) against the latest version of desktop Chrome, Safari, Firefox, and Edge. Mobile versions of these same browsers are expected to work but aren't currently tested.
186
485
 
187
- ### 2.0.0
188
-
189
- * Removed uuid.BufferClass
486
+ **Node**: `uuid` [builds are tested](https://github.com/uuidjs/uuid/blob/main/.github/workflows/ci.yml#L26-L27) against node ([LTS releases](https://github.com/nodejs/Release)), plus one prior. E.g. `node@18` is in maintainence mode, and `node@22` is the current LTS release. So `uuid` supports `node@16`-`node@22`.
190
487
 
191
- ### 1.4.0
488
+ **Typescript**: TS versions released within the past two years are supported. [source](https://github.com/microsoft/TypeScript/issues/49088#issuecomment-2468723715)
192
489
 
193
- * Improved module context detection
194
- * Removed public RNG functions
490
+ ## Known issues
195
491
 
196
- ### 1.3.2
492
+ <!-- This header is referenced as an anchor in src/rng-browser.ts -->
197
493
 
198
- * Improve tests and handling of v1() options (Issue #24)
199
- * Expose RNG option to allow for perf testing with different generators
494
+ ### "getRandomValues() not supported"
495
+
496
+ This error occurs in environments where the standard [`crypto.getRandomValues()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues) API is not supported. This issue can be resolved by adding an appropriate polyfill:
497
+
498
+ #### React Native / Expo
499
+
500
+ 1. Install [`react-native-get-random-values`](https://github.com/LinusU/react-native-get-random-values#readme)
501
+ 1. Import it _before_ `uuid`. Since `uuid` might also appear as a transitive dependency of some other imports it's safest to just import `react-native-get-random-values` as the very first thing in your entry point:
502
+
503
+ ```javascript
504
+ import 'react-native-get-random-values';
505
+ import { v4 as uuidv4 } from 'uuid';
506
+ ```
200
507
 
201
- ### 1.3.0
508
+ ---
202
509
 
203
- * Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!
204
- * Support for node.js crypto API
205
- * De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code
510
+ Markdown generated from [README_js.md](README_js.md) by <a href="https://github.com/broofa/runmd"><image height="13" src="https://camo.githubusercontent.com/5c7c603cd1e6a43370b0a5063d457e0dabb74cf317adc7baba183acb686ee8d0/687474703a2f2f692e696d6775722e636f6d2f634a4b6f3662552e706e67" /></a>
@@ -0,0 +1,15 @@
1
+ export type * from './types.js';
2
+ export { default as MAX } from './max.js';
3
+ export { default as NIL } from './nil.js';
4
+ export { default as parse } from './parse.js';
5
+ export { default as stringify } from './stringify.js';
6
+ export { default as v1 } from './v1.js';
7
+ export { default as v1ToV6 } from './v1ToV6.js';
8
+ export { default as v3 } from './v3.js';
9
+ export { default as v4 } from './v4.js';
10
+ export { default as v5 } from './v5.js';
11
+ export { default as v6 } from './v6.js';
12
+ export { default as v6ToV1 } from './v6ToV1.js';
13
+ export { default as v7 } from './v7.js';
14
+ export { default as validate } from './validate.js';
15
+ export { default as version } from './version.js';