UNPKG

1.56 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3/**
4 * Convert a number or array of integers to a string of padded hex octets.
5 */
6function asHex(value) {
7 return Array.from(value)
8 .map(function (i) { return ("00" + i.toString(16)).slice(-2); })
9 .join('');
10}
11/**
12 * Attempt to securely generate random bytes/
13 */
14function getRandomBytes(size) {
15 // SPRNG
16 if (typeof Uint8Array === 'function' && typeof window === 'object' && window.crypto) {
17 var buffer = new Uint8Array(size);
18 var randomValues = window.crypto.getRandomValues(buffer);
19 if (randomValues) {
20 return randomValues;
21 }
22 }
23 // Insecure random
24 return Array.from(new Array(size), function () { return (Math.random() * 255) | 0; });
25}
26/**
27 * Generate a RFC4122-compliant v4 UUID.
28 *
29 * @see http://www.ietf.org/rfc/rfc4122.txt
30 */
31function generateUuid() {
32 var version = 64;
33 var clockSeqHiAndReserved = getRandomBytes(1);
34 var timeHiAndVersion = getRandomBytes(2);
35 clockSeqHiAndReserved[0] &= 63 | 128;
36 // tslint:disable-next-line:binary-expression-operand-order
37 timeHiAndVersion[0] &= 15 | version;
38 return [
39 asHex(getRandomBytes(4)),
40 '-',
41 asHex(getRandomBytes(2)),
42 '-',
43 asHex(timeHiAndVersion),
44 '-',
45 asHex(clockSeqHiAndReserved),
46 asHex(getRandomBytes(1)),
47 '-',
48 asHex(getRandomBytes(6)),
49 ].join('');
50}
51exports.generateUuid = generateUuid;
52// Default
53exports.default = generateUuid;