diff options
Diffstat (limited to 'deps/npm/node_modules/uuid/lib/rng-browser.js')
-rw-r--r-- | deps/npm/node_modules/uuid/lib/rng-browser.js | 21 |
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; |