You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
26 lines
1.1 KiB
26 lines
1.1 KiB
"use strict"; |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.default = rng; |
|
// Unique ID creation requires a high quality random # generator. In the browser we therefore |
|
// require the crypto API and do not support built-in fallback to lower quality random number |
|
// generators (like Math.random()). |
|
let getRandomValues; |
|
const rnds8 = new Uint8Array(16); |
|
|
|
function rng() { |
|
// lazy load so that environments that need to polyfill have a chance to do so |
|
if (!getRandomValues) { |
|
// getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, |
|
// find the complete implementation of crypto (msCrypto) on IE11. |
|
getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); |
|
|
|
if (!getRandomValues) { |
|
throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); |
|
} |
|
} |
|
|
|
return getRandomValues(rnds8); |
|
} |