aboutsummaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/uuid/lib/rng-browser.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/uuid/lib/rng-browser.js')
-rw-r--r--deps/npm/node_modules/uuid/lib/rng-browser.js21
1 files changed, 11 insertions, 10 deletions
diff --git a/deps/npm/node_modules/uuid/lib/rng-browser.js b/deps/npm/node_modules/uuid/lib/rng-browser.js
index 14d21170d5..ac39b1289b 100644
--- a/deps/npm/node_modules/uuid/lib/rng-browser.js
+++ b/deps/npm/node_modules/uuid/lib/rng-browser.js
@@ -2,26 +2,25 @@
// browser this is a little complicated due to unknown quality of Math.random()
// and inconsistent support for the `crypto` API. We do the best we can via
// feature-detection
+var rng;
-// getRandomValues needs to be invoked in a context where "this" is a Crypto implementation.
-var getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues.bind(crypto)) ||
- (typeof(msCrypto) != 'undefined' && msCrypto.getRandomValues.bind(msCrypto));
-if (getRandomValues) {
+var crypto = global.crypto || global.msCrypto; // for IE 11
+if (crypto && crypto.getRandomValues) {
// WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto
var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef
-
- module.exports = function whatwgRNG() {
- getRandomValues(rnds8);
+ rng = function whatwgRNG() {
+ crypto.getRandomValues(rnds8);
return rnds8;
};
-} else {
+}
+
+if (!rng) {
// Math.random()-based (RNG)
//
// If all else fails, use Math.random(). It's fast, but is of unspecified
// quality.
var rnds = new Array(16);
-
- module.exports = function mathRNG() {
+ rng = function() {
for (var i = 0, r; i < 16; i++) {
if ((i & 0x03) === 0) r = Math.random() * 0x100000000;
rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;
@@ -30,3 +29,5 @@ if (getRandomValues) {
return rnds;
};
}
+
+module.exports = rng;